В моем приложении для 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()
, он успешно распечатывает каталог кеша моего приложения. Smt вот так:
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
Как исправить это предупреждение в моем одноэлементном классе?