2013-02-18 54 views
7

我對,onStoponSaveInstanceState中應該發生什麼感到困惑。例如,Android的文檔說 對於 -android-存儲在onPause,onStop或onSaveInstanceState中的數據

提交未保存的更改,但前提是用戶期望,當他們離開(如電子郵件草稿)將被永久保存這些變化。

對於onStop -

你應該使用的onStop()來執行更大,更多的CPU關機操作,比如到數據庫中寫入信息。

對於onSaveInstanceState

您的活動可能有你想恢復,如跟蹤用戶在作業進展成員變​​量更多的狀態信息。

這不是真的,這三件事基本上是指存儲信息,如表單或電子郵件?那麼應該保存哪種方法?

回答

6

你想持久化的一切都必須存儲在onPause()中,因爲有些Android版本認爲你的應用程序在返回onPause()之後是可用的。

由於onPause()發生的頻率相對較高,並且在很多情況下您可能不會保存相同Activity的onResume()的狀態,因此可能會造成某種程度上的不同。因此,在執行onPause()的昂貴操作之前,每個人都希望您三思。

有關存儲表單數據的問題,當輸入字段失去焦點時,如果用戶看到相同的表單數據,甚至在他停止應用程序並重新啓動應用程序後,您可以使其持久化。

+0

自從2016年1月開始,Honeycomb(3.0)佔到Android設備的96.8%,因此''onStop()'保證會被調用。所以我更喜歡''onStop()'onPause()'來保存數據現在。 – 2016-01-06 09:11:44

+0

@VickyChijwani從軟件工程的角度來看,_preferring_'onStop()'over onPause()'是不可接受的,除非你明確地在你的應用程序的元數據中(你沒有提到)_require_ Android 3.0。 – 2016-01-06 09:52:15

+0

對,我確實爲Android 3.0和更高版本製作了我的應用程序,應該提到這一點。我更喜歡onStop()的另一個原因是[onPause()'docs]中的這一行(http://developer.android.com/reference/android/app/Activity.html#onPause %28%29):「當活動B在活動A前面啓動時,...... B將不會被創建,直到A的onPause()返回爲止,所以一定不要在這裏做任何冗長的事情。當然,整個生命週期文檔仍然相當混亂,所以這不是確鑿的。 – 2016-01-06 09:58:57

2

對於任何人在2016年或以後來到這裏,請注意@Class Stacker的回答在這一點上已經過時了。具體來說,onStop()保證由於Android 3.0(蜂巢),佔96.8% of Android devices爲2016年一月

的見的生命週期文檔這裏被稱爲http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle(按Ctrl + F「未在killable狀態」)

UPDATE:正如在評論中指出的那樣,這當然意味着您的應用必須僅限於Android 3.0及更高版本。

+0

只是爲了再次說明這一點(上面也有說明),百分比本身並不是一個足夠的觀點。一個不會解決'onPause()'中持久性問題的應用程序必須嚴格限制在Android 3及以上版本。 – 2016-01-06 13:11:17

相關問題