Anko DBHelper Предупреждение об утечке памяти в одноместном / дополнительном контексте - PullRequest
0 голосов
/ 07 февраля 2019

Я пытался использовать Anko DBHelper наследовать ManagedSQLiteOpenHelper ( стандартный пример из Anko docs ) в удовольствие onCreate () Я хочу вставить некоторые строки по умолчанию.Данные строк, которые я получаю от R.string.

db.insert(
            TABLE_NAME_CATEGORY,
            "name" to mContext.getString(R.string.db_category_default),
            "color" to "#FF6677"
        )

Это работает, но я получил (в Android Studio) предупреждение об утечке памяти в строке:

 private var instance: DbHelper? = null

Больше кода от DbHelper.kt:

class DbHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, DB_NAME, null, DB_VERSION) {

private val mContext : Context = ctx

companion object {
    private var instance: DbHelper? = null

    @Synchronized
    fun getInstance(ctx: Context): DbHelper {
        if (instance == null) {
            instance = DbHelper(ctx.applicationContext)
        }
        return instance!!
    }
}

override fun onCreate(db: SQLiteDatabase) {

В extension.kt у меня есть

val Context.database: DbHelper
   get() = DbHelper.getInstance(applicationContext)

Как мне избежать этой потенциальной утечки памяти с возможностью использования R.string.db_category_default внутри DbHelper onCreate ().

Я также использую App.kt

class App : Application() {

может быть, это хорошее место для создания экземпляра DbHelper без создания синглтона (объекта-компаньона) в DbHelper?Или использовать WeakReference?

Я видел, что похожий вопрос повторяется, но, к сожалению, я не нашел ответа, который смог бы реализовать: (

спасибо за ваше время и извините задовольно хаотичный вопрос.

...