在我的 Android 应用程序中,我需要为服务类创建带有参数的单例:
class AndroidFileUtil2 private constructor(newContext: Context) {
init {
context = newContext
if (BuildConfig.DEBUG)
Log.d(TAG, "CONSTRUCTOR: context = $context")
}
companion object {
private var instance: AndroidFileUtil2? = null
private lateinit var context: Context
private val TAG = AndroidFileUtil2::class.java.name
@Synchronized
fun getInstance(context: Context): AndroidFileUtil2 {
if (instance == null) {
instance = AndroidFileUtil2(context)
}
return instance as AndroidFileUtil2
}
fun getTest() {
if (BuildConfig.DEBUG)
Log.d(TAG, "getTest(): context_cacheDir = ${context.cacheDir}")
}
}
}
并像这样使用:
class Main : Application() {
override fun onCreate() {
super.onCreate()
AndroidFileUtil2.getInstance(appContext)
AndroidFileUtil2.getTest()
}
}
它工作正常。当我称它为AndroidFileUtil2.getTest()我的应用程序的成功打印缓存目录时。像这样:
getTest(): context_cacheDir = /data/user/0/com.myproject.client.debug/cache
好的。
但在 IDE 上,我收到这样的警告:
Do not place Android context classes in static fields. This is a memory leak
在这一行:
private lateinit var context: Context
如何在我的单身课程中解决此警告?