2013-05-11 25 views
3

關閉/完成一項活動並仍然希望通過,onStoponDestroy的Android方式是什麼?如何在經歷生命週期破壞的同時關閉一項活動?

我知道Activity.finish(),但這隻會保證不打電話onDestroy()不是其他兩個。基於android文檔的原因,數據庫訪問應該在onStop()中完成,因此它不會減慢用戶的速度,這是我的意圖,將所有「保存」保留到onStop(),但是,我只注意到該函數不是所謂finish()被稱爲...

所以......這種情況下的解決方案是什麼?我的意思是,我可以創建一個boolean變量,但有沒有更復雜的方法?甚至另一種結束活動的方式,例如調用onDestory(),是不正確的做法?

編輯

對不起,我misstyped那部分,我的意思是說保存到數據庫中onStop(),而不是在onDestroy()

雖然在onPause()方法的onStop()調用之前,您應該 使用的onStop()來執行更大,更多的CPU關機 操作,比如到數據庫中寫入信息。

Source

回答

1

調用Activity.finish不經過活動的生命週期

注意:不要指望這個http://developer.android.com/training/basics/activity-lifecycle/stopping.html

另外的文檔onDestroy()狀態方法被稱爲保存數據的地方!

onPause()狀態:

This callback is mostly used for saving any persistent state the activity is editing, to present a "edit in place" model to the user and making sure nothing is lost if there are not enough resources to start the new activity without first killing this one. This is also a good place to do things like stop animations and other things that consume a noticeable amount of CPU in order to make the switch to the next activity as fast as possible, or to close resources that are exclusive access such as the camera. 

而最後一件事,爲onStop()

注意,此方法可能永遠不會被調用,在低內存情況下的系統沒有足夠的內存可以在調用onPause()方法後保持活動的進程運行。

就剩下你只是的onPause()作爲覆蓋,並執行一些東西保存方法。它確實被稱爲。

在找到一個相關的問題在這裏:finish() and the Activity lifecycle

+0

真對不起,我想念類型的東西,我編輯的問題,請再看一遍,編輯部分足以看到我的錯誤 – LuckyMe 2013-05-11 10:46:45

+0

你剩下的就是這兩個選項,它實際上取決於你的數據庫代碼有多慢,並且每當重要時總是保存數據(因爲如果設備內存不足,您的活動將錯過onStop調用)。如果只保存幾行,我會去onPause()以避免用戶失去他的工作。 – Trax 2013-05-11 10:50:41

+0

好吧,但是如果我想通過對話框提醒終止活動,我可以強制它通過'onStop()'嗎?因爲'finish()'不僅僅通過'onStop()'onDestroy()'。 – LuckyMe 2013-05-11 10:54:19

0

按照該文件,「如果系統必須在緊急情況下恢復記憶,那麼的onStop()和的onDestroy()可能不會被調用。因此,你應該使用onPause()將關鍵持久數據(如用戶編輯)寫入存儲。但是,你應該選擇哪些信息必須在onPause()過程中被保留,因爲在這種方法中的任何阻塞程序阻止過渡到下一個活動,減緩用戶體驗。」

這意味着,的onPause()是DB操作正確的方法,但如果他們太沉重,以阻止用戶界面的過渡,只有那麼就應該在調用OnStop()完成