In my Android app I need to create singleton with param for service class:
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}")
}
}
}
and use like this:
class Main : Application() {
override fun onCreate() {
super.onCreate()
AndroidFileUtil2.getInstance(appContext)
AndroidFileUtil2.getTest()
}
}
It's work fine. When I call AndroidFileUtil2.getTest()
it's success print cache dir of my app. Smt like this:
getTest(): context_cacheDir = /data/user/0/com.myproject.client.debug/cache
Nice.
But on IDE I get warning like this:
Do not place Android context classes in static fields. This is a memory leak
in this line:
private lateinit var context: Context
How fix this warning in my singleton class?