奇妙なバグがあります。バッテリーがなくなると、アプリはデータ(SQLiteに保存されている)を失いますが、アプリケーションを強制的に強制終了してからバッテリーがなくなると、失われません。
何が原因かわかりません。
編集1:
データを失うとはどういう意味ですか?
- ユーザーが登録すると、ユーザー名などが保存されます。
- アプリが閉じられ、強制的に閉じられ、ユーザーがアプリを再度開くと、ユーザー名が表示されます
- バッテリーがなくなり、アプリがフォアグラウンドで実行されている場合。バッテリーが再充電され、ユーザーがアプリを再度開くと、ユーザー名はなくなります。
オブジェクトはどのように保存されますか:
public Void perform(SQLiteDatabase db) {
final ConfigEntry entry = new ConfigEntry(property, value);
if(contains(property)) {
db.update(ConfigEntry.TABLE_NAME, databaseAdapter.convertToContentValues(entry), ConfigEntry.COLUMN_NAME + " = ?", new String[] { property });
} else {
db.insertOrThrow(ConfigEntry.TABLE_NAME, null, databaseAdapter.convertToContentValues(entry));
}
return null;
}
});
したがって、基本的にdb.insertOrThrowが呼び出されます。
データベースを初期化する方法は次のとおりです。
public S doInTransaction(TransactionTask task) {
DatabaseHelper mDbHelper = DatabaseHelper.getInstance(mContext);
SQLiteDatabase mDb = mDbHelper.getWritableDatabase();
mDb.setLockingEnabled(true);
mDb.beginTransaction();
try {
S result = task.perform(mDb);
mDb.setTransactionSuccessful();
return result;
} finally {
mDb.endTransaction();
}
}