我们有一个奇怪的错误。如果电池耗尽,我们的应用程序将丢失其数据(存储在 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();
}
}