2012-06-18 20 views
1

我有一個小的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手機!),保存到數據庫是非常緩慢的,這只是不是邏輯 - 僅僅因爲任何活動都在被破壞 - 然後更新數據庫。

非常感謝

回答

1

什麼會來處理,最好的辦法?

你目前正在處理它,儘管可能使用來自onPause()AsyncTask,只有從那裏你正在發生變化的數據,可能使用某種isDirty標誌,讓你知道,如果數據確實需要活動的方式堅持。

原因你不想等到onDestroy()onDestroy()不保證被調用。

如果MainDataManager對象被破壞,我寧願只保存數據到數據庫。

該對象將永遠不會被「銷燬」 - 它將一直存在,直到進程終止。

+0

再次感謝:-)。好吧,然後我保持它的方式,但是,如前所述,即使最小的數據庫更新也很慢,也許「isDirty」標誌可以減少更新所需的時間。做一個AsyncTask當然是一個很好的出路 - 但是,我不確定,AsyncTasks執行的順序實際上總是正確的。除了確保「同步」更新方法的小問題外。 – user387184

+0

@ user387184:對'SQLiteDatabase'的訪問在'SQLiteDatabase'級同步,所以你不必擔心這個特定的問題。您還可以更主動地存儲您的數據(例如,基於UI事件),而不是等待相關。 – CommonsWare