2

AsyncTaskLoaderでSQLiteDatabase接続をどこでいつ開く必要があるのか​​疑問に思っています。ローダーのライフサイクルを完全に理解しているとは思えないので、これを正しく行わないと、メモリリーク/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 に答える