我尝试使用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?
我看到重复了类似的问题,但是不幸的是,我没有找到我能够实现的答案:(
感谢您的时间,对于这个相当混乱的问题表示抱歉。