HTC Desire(androidバージョン2.3.3)でアプリを実行する次の関数を呼び出すと、メモリ使用量が増加することに気付きました。
private static final String TABLE_MODULES = "tbl_module1";
private static final String MOD1_INCLUDE = "mod1_include";
private void setItemInclude (int idx, boolean include)
{
String incString = "";
if (include)
incString = "true";
else
incString = "false";
ContentValues args = new ContentValues();
args.put(MOD1_INCLUDE, incString);
database.update(TABLE_MODULES,args,"_id="+idx,null);
}
ここで、データベースはSQLiteDatabaseタイプであり、dbHelper.getWritableDatabase()の呼び出しから取得され、dbHelperはSQLiteOpenHelperから派生し、アプリケーションコンテキストでインスタンス化されます。
必要な更新を取得しましたが、アプリケーションのデータ使用量を確認すると、呼び出しごとに約60KB増加しているように見え、dbHelper.close()が呼び出されない限り解放されません。この関数を複数回呼び出すと、SQLiteDiskIOExceptionが発生します。
私は試しdatabase.rawQuery()
ましたが、これも正しく更新されますが、同様にメモリに残ります。
String updateQuery = "UPDATE " + TABLE_MODULES + " SET MOD1_INCLUDE = " + "'" + incString + "'" + " WHERE _id ='" + idx + "'";
Cursor cursor = database.rawQuery(updateQuery, null);
cursor.moveToFirst();
cursor.close();
Asus(android 4.0.3)とOrange San Francisco(android 2.1.update1)で同じコードを実行しても、この問題は発生しません。
getWritableDatabase
はアクティビティから呼び出されonCreate()
、結果のデータベースはで閉じられますonDestroy()
。活動中はデータベースを開いたままでも大丈夫だと思いました。原因は何かについて何か考えはありますか?