2

我想知道应该在何时何地在我的 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();
    }

    ....

}

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

4

1 回答 1

2

最好的方法可能是复制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;
}
于 2012-03-03T14:29:55.480 回答