如何在AsyncTaskLoader中处理SQLiteDatabase连接?

时间:2012-03-03 13:20:56

标签: 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();
    }

    ....

}

但是我又在哪里关闭连接?

1 个答案:

答案 0 :(得分:2)

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;
}