Я пытался использовать 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?
Я видел, что похожий вопрос повторяется, но, к сожалению, я не нашел ответа, который смог бы реализовать: (
спасибо за ваше время и извините задовольно хаотичный вопрос.