android - 应如何在 AsyncTaskLoader 内处理 SQLiteDatabase 连接?

标签 android asynctaskloader

我想知道我应该在何时何地打开/关闭 AsyncTaskLoader 中的 SQLiteDatabase 连接。我觉得我不完全理解 Loader 的生命周期,所以我担心如果我不这样做,我可能会遇到一些内存泄漏/NullPointerExceptions。我目前在加载器的构造函数中打开 SQLiteDatabase:

private class SQLiteCursorLoader extends AsyncTaskLoader<Cursor> {

    private String _queryString;
    private SQLiteDatabase _db;
    ...

    public SQLiteCursorLoader(Context context, String queryString) {
        super(context);
        _queryString = queryString;
        _db = MySQLiteOpenHelper.getWritableDatabase();
    }

    ....

}

但是我在哪里可以再次关闭连接呢?

最佳答案

best way可能会复制 CursorLoader.java并修改 loadInBackground() 方法以使用您的 SQLiteDatabase

/* Runs on a worker thread */
@Override
public Cursor loadInBackground() {
    Cursor cursor = // Your stuff goes here <..>
    if (cursor != null) {
        // Ensure the cursor window is filled
        cursor.getCount();
        registerContentObserver(cursor, mObserver);
    }
    return cursor;
}

关于android - 应如何在 AsyncTaskLoader 内处理 SQLiteDatabase 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9546442/

相关文章:

java - ObLong 单击 ListView 弹出窗口

android - Firebase无法正常运行Android Studio 3.0.1 [com.android.support:support-core-utils:27.1.0]

android - 一个 Activity 或 fragment 必须有一个单独的加载程序来执行每个数据库操作的类型吗?

Android 在服务中使用 AsyncTaskLoader

android - 使用 AsyncTaskLoader 和 Fragment 的 onCreateLoader 方法中的不兼容类型

android - 操作栏中未显示溢出

android - Dagger Hilt 为不同的风格/构建类型提供替代模块

android - AsyncTaskLoader 中的 "leaking"上下文有那么糟糕吗?

android - 自定义 CursorLoader 和支持 ListView 的 CursorAdapter 之间的数据不同步

java - 使用 android 从 google 应用引擎查询实体