Anko DBHelper单例/同伴上下文内存泄漏警告

时间:2019-02-07 19:15:18

标签: android kotlin sqliteopenhelper anko

我尝试使用Anko DBHelper继承了ManagedSQLiteOpenHelper(standard example from 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)

如何避免这种潜在的内存泄漏,请在DbHelper onCreate()中使用R.string.db_category_default。

我也使用App.kt

class App : Application() {

也许这是创建DbHelper实例而不使单例的好地方 (伴侣对象)在DbHelper中?还是使用WeakReference?

我看到重复了类似的问题,但是不幸的是,我没有找到我能够实现的答案:(

感谢您的时间,对于这个相当混乱的问题表示抱歉。

0 个答案:

没有答案