在 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);
}
其中 database 是 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()
. 我认为在活动期间保持数据库打开是可以的。关于原因的任何想法?