首页 > 解决方案 > 在构造函数中创建具有 Android 上下文作为参数的单例类

问题描述

在我的 Android I 应用程序中,我需要创建单例类并将 android 上下文作为参数传递给构造函数:

片段:

class RecognizedCheckDataService private constructor(context: Context) {
    private var context: Context? = null

    init { // default constructor
        this.context = context
        recognizedCheckDataDir =
            AndroidFileUtil.getInternalStoragePath(context, RECOGNIZED_CHECK_DATA)
    }

    companion object {
        var recognizedCheckDataDir: File? = null
        private val RECOGNIZED_CHECK_DATA = "RECOGNIZED_CHECK_DATA"
        private var instance: RecognizedCheckDataService? = null

        private val TAG = RecognizedCheckDataService::class.java.name

        @Synchronized
        fun getInstance(context: Context): RecognizedCheckDataService {
            if (instance == null) {
                instance = RecognizedCheckDataService(context)
            }
            return instance as RecognizedCheckDataService
        }

        fun deleteRecognizedCheckDataDir(): Boolean {
            try {
                // first check is exist and then delete
                FileUtils.deleteDirectory(recognizedCheckDataDir);
                return true
            } catch (e: IOException) {
                return false
            }
        }
    }
}

并使用:

class Main : Application() {
    companion object {
        private lateinit var appContext: Context

        fun getAppContext(): Context {
            return appContext
        }    

    }

    override fun onCreate() {
        super.onCreate()
        //Debug.d(TAG, "onCreate: ENTRY_POINT")
        init()
    }

 private fun init() {
        appContext = this
        RecognizedCheckDataService.getInstance(appContext)
    }
}

这是正确的方法吗?

标签: androidkotlin

解决方案


我认为这可以帮助你。

class Singleton {
    var mContext: Context

    constructor(context: Context) {
        mContext = context
    }

    companion object {
        private var instance: HttpClientService? = null
        fun getInstance(context: Context): HttpClientService {
            if (instance == null) {
                instance = HttpClientService(context)
            }

            return instance!!
        }
    }
}

推荐阅读