android - 在构造函数中创建具有 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)
}
}
这是正确的方法吗?
解决方案
我认为这可以帮助你。
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!!
}
}
}
推荐阅读
- c - 为什么 Cert-C 禁止在 while 循环声明中进行赋值?
- ios - iOS UITableView 偏移刷新控件
- r - 处理各种调查样本中的多个变量
- apache - 在 httpd.conf 文件中插入行的 shell 脚本
- python - 如何从 Python 运行时云函数访问 Google Cloud Platform Firestore 触发器
- powershell - 无法将我的班级的实例添加到列表中
- spring - Rabbit MQ 启动 Spring Boot Run 失败(连接被拒绝)
- json.net - 通过反射调用 NewtonSoft SerializeObject 和 DeserializeObject 方法以解决版本不匹配问题
- c++ - 从 C++14 开始合法使用尾随返回类型语法
- android - 创建包含 recyclerView 中项目数量的 TextView