2015-04-12 141 views
0

我在開發應用程序時遇到了一些問題。如何處理簡歷後丟失的數據

在我最小化應用程序或關閉屏幕後,打開很多其他應用程序或在很長時間後重新打開手機。 當我重新啓動我的應用程序時,它會嘗試恢復並繼續顯示相同的頁面(帶有片段)。 但我需要的數據已被銷燬,因此它將爲空。 數據是一個對象數組,我知道也許我可以將它們存儲在數據庫中。 但由於數據會在用戶每次點擊某物時更新。 所以我不想將它保存到數據庫中,我想這意味着大量的存儲I/O女巫是沒有必要的。 我想知道是否有任何解決方案重新啓動洞應用程序時,東西被摧毀? 或者讓它發生的唯一方法是我處理空數組並重新加載自己? 我真的不想這樣做,因爲我猜這會給我帶來許多意想不到的問題,導致數據與許多頁面相關。 切換頁面時,我必須考慮太多情況。

有什麼建議嗎?

+0

要麼必須使用數據庫或共享首選項,並且如果希望數據更新,則必須在簡歷上重新加載數據。另一種方法是你可以完全完成應用程序。 – Aakash

+0

原因有其他情況會去onResme,我不能做onResume時重新加載。 我不必將數據存儲很長時間或永久存儲,可能在5或10分鐘後銷燬數據。 是的,我試圖完全完成應用程序,並從列表銷燬時開始。 –

回答

1

但我需要的數據都已經被破壞,因此將是無效

那是因爲your process was terminated而你沒有save your state

但由於數據會更新每次用戶點擊的東西

或者,你可以fork一個線程將數據保存爲您onPause()onStop()方法的一部分。 「永不保存」和「每次點擊後節省」之間有很多可能性。

所以我不想把它保存到數據庫中,我想這意味着大量的存儲I/O女巫是沒有必要的

,如果你希望數據是有30多分鐘在用戶離開應用程序後,您的選擇是將數據保存在本地(文件,數據庫,SharedPreferences)或將數據保存到Internet的某處。

對於少量的在較短時間段的數據,你可以把提供給onSaveInstanceState()Bundle的數據,然後拉出來的數據Bundle稍後的(例如,在您的活動onRestoreInstanceState())。您已經應該這樣做來處理屏幕旋轉和其他配置更改。

我想知道是否有任何解決方案重新啓動洞應用程序時,東西被摧毀?

歡迎您add android:clearTaskOnLaunch="true"到你的發射活動,以表明你總是要從頭開始,每當用戶離開你的應用程序,並試圖回來了。用戶不會理解這一點,因爲這意味着他們即使暫時不在應用程序中也會失去他們的狀態(例如,快速回復短信)。此屬性不會終止您的進程,但它會force the user back to the launcher activity,並且會消除以前在您的應用中的任何其他活動。

或者讓它發生的唯一方法是我處理空數組並重新加載自己?

這就是開發人員通常做的,是的。

+0

嗨,非常感謝!我不試圖保存數據,因爲我不需要長時間保存數據,我只希望這些數據可以保存1到2分鐘,對於我來說數據在很長一段時間後被破壞是完全正確的。因此,將它保存在數據庫中將是我要嘗試的最後一件事。但是我遇到了一些問題,即數據被破壞了,但活動和片段狀態仍然存在,我希望應用程序在這些數據被銷燬時從頭開始。我在考慮是否有一些解決方案可以在數據被破壞時強制活動被銷燬。 –

+0

我試圖添加android:clearTaskOnLaunch =「true」,它似乎會清除所有狀態,當我用退後鍵離開應用程序時,但仍然在同一頁面上時,我通過使用Home按鈕離開應用程序或切換到另一個應用程序。我試圖通過使用主頁按鈕離開應用程序時重現該錯誤。查看錯誤是否會再次顯示,或者是否會重新啓動應用程序。我認爲重新啓動應用程序的唯一方法是檢查數據,並在數據爲空時清除所有堆棧。但我想這不是一種優雅的方式......所以我一直在尋找一些更好的方法來做到這一點。 –