我有一個小的DB和讀數據所需的提取物在靜態地存儲這樣在一個叫做MainDataManager類Singleton對象:存儲數據時應用「端部」
public class MainDataManager {
private static Context context;
public static MainDataManager mainDataManager = null;
public static MainDataManager getInstance(Context ctx) {
context = ctx;
if (mainDataManager == null) {
...get the data from DB
...put the data in static mainDataManager variable
}
return mainDataManager;
}
中的每一個類/活性
現在我可以輕鬆訪問MainDataManager.mainDataManager數據的應用程序。
有時我想將數據保存回數據庫。
目前我在
@Override
protected void onPause() {
super.onPause();
saveState(); //saves the mainDataManager's data to the DB
}
做到這一點的每一項活動,我想避免這種情況,並認爲這實際上是「拯救」不夠的,如果我更新數據庫只有當用戶退出應用程序(無論這種手段) - 或者當Android想銷燬MainDataManager對象時更好。
雖然我可以把我的saveState()
調用放在onDestroy()
方法的活動中,但我寧願只在MainDataManager對象被銷燬時纔將數據保存到數據庫。但是對於普通對象沒有onDestroy()
。
什麼是最好的處理方式?
ps爲什麼我不想saveState()在每個活動的onDestroy()
是因爲即使數據非常少(特別是在較舊的Android手機!),保存到數據庫是非常緩慢的,這只是不是邏輯 - 僅僅因爲任何活動都在被破壞 - 然後更新數據庫。
非常感謝
再次感謝:-)。好吧,然後我保持它的方式,但是,如前所述,即使最小的數據庫更新也很慢,也許「isDirty」標誌可以減少更新所需的時間。做一個AsyncTask當然是一個很好的出路 - 但是,我不確定,AsyncTasks執行的順序實際上總是正確的。除了確保「同步」更新方法的小問題外。 – user387184
@ user387184:對'SQLiteDatabase'的訪問在'SQLiteDatabase'級同步,所以你不必擔心這個特定的問題。您還可以更主動地存儲您的數據(例如,基於UI事件),而不是等待相關。 – CommonsWare