【发布时间】:2020-01-30 12:03:00
【问题描述】:
在我的 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
如何在我的单例类中修复此警告?
【问题讨论】: