這更多的是對您的意見的要求,而不是問題。 這將是有點長,所以不用擔心,如果你沒有耐心讀一遍。 停在這裏,如果你不我目前使用共享偏好來頻繁存儲一些值,逐一,我的應用程序的執行過程中:)Android。共享首選項。崩潰情況下檢索到的損壞數據
。實際上,每2秒鐘這些值就會改變,並且需要將它們存儲在首選項中,以便用戶在關閉應用程序並重新打開應用程序後,可以從停止的位置繼續。
我曾經想過的一個問題是,如果有機會強制關閉應用程序,例如電池在值被保存時死亡,那麼當用戶試圖從他離開的地方恢復時,數據無效,因爲它之前沒有完全保存(例如,只有5個值中的2個被存儲)。
我想如何解決這個問題是保存數據兩次,在「兩個時隙」(我的意思是插槽是每個值,就像我說過有多個值,將存儲在「valueName_1 「或」valueName_2「),並且在正常值存儲旁邊,我還將在首選項內保存兩個值,這些值將用於驗證數據是否完全保存。 其中這兩個值curSavingSpot
將參照位置在這兩個插槽在那裏我已經最後保存(或曾嘗試在情況下保存的失敗)的一個值,而其他curSavedSuccessfully
將跟蹤如果LAST存儲值全部是成功存儲的。
例如:
- 最初在共享縣每個字段爲空。
curSavingSpot
指向1(第一個「slot」),curSavedSuccessfully
爲false。 我開始在插槽1中保存價值和保存完成他們不會受到任何干擾,所以
curSavedSuccessfully
將作爲我們已經成功保存的值2秒後發虛,我開始保存新的值。這次是插槽2.但首先,我將
curSavingSpot
的值設置爲2和curSavedSuccessfully
爲false。讓我們說,當我保存5個值中的3個(還有2個值)時,設備崩潰。當我重新啓動它時,我會首先檢查上次保存會話是否成功完成,根據curSavedSuccessfully
沒有發生,所以我看curSavingSpot
並採取相反的值,在這種情況下,我知道2還沒有完成所以這意味着1有正確的值。
您怎麼看?這是做這件事的好方法嗎?有沒有更好的方法確保它保存了所有必需的值?
有什麼建議嗎?這個想法有什麼缺陷嗎?
對不起,很長的文章。
你不能使用onDestroy來保存重要的數據 - 它不保證被調用。唯一可以保證的是,當用戶離開你的活動時,onSaveState被調用。有一箇舊的,但仍然是實際的,很好的主題http://android-developers.blogspot.ru/2010/04/multitasking-android-way.html – Deepscorn 2015-10-29 08:25:46