2011-08-29 41 views
9

看看活動生命週期圖,我注意到onPause()onStop()都可能導致「進程」被殺害。這需要onCreate()當用戶想要恢復他們的應用程序時被調用。關鍵是onStop()不一定叫,也不是onDestroy(),但onPause()可能是活動可能看到的唯一事件。在這種情況下,onPause()必須處理保存應用程序狀態,以便用戶稍後可以返回,無論onStop()是否被調用。Android onStop/onDestroy - 何時可以使用它們?

我可以看到onDestroy()被用來清理活動特定的資源,這些資源在進程kill操作中自然會被消除。 onDestroy()會有什麼好處嗎?

onStop()會有什麼好處?我爲什麼要重寫它?

回答

4

如果我把你的問題說得對:這取決於你想要對你的應用程序做什麼。假設您是使用GPS的編程應用程序。在用戶不再可見活動時調用的onStop()中,可以刪除這些請求。或者,如果您的應用程序正在運行,您可以停止某些服務。或者你可以保存偏好(不建議,改爲在onPause()),或者你可以關閉永久連接到服務器.....如果我想別的什麼,我會添加更多...

+0

什麼是onStop()? – user574771

+0

對不起,我指的是'onStop()',lapsus mentis。 :)我將編輯我的答案 –

+0

因此,聽起來您使用onStop()來響應不再可見的活動,並且onPause()對於發佈GPS提供者來說還爲時過早。但我擔心的是進程kill可能無法正確處理資源的釋放。 – user574771

0

另一個例如將註冊和取消註冊廣播接收器。

請注意,通常這些東西放置在onResume和onPause中,但差異很小,但是當活動置於另一個活動的後面時會調用onResume/onPause,而當活動不再可見時,將調用onStart/onStop屏幕。

+0

另一個微妙的區別是,如果他們是我的開始和停止,當onStop沒有被調用時會發生什麼,但是進程被終止了?廣播接收機是否乾淨地註冊?我認爲它是。 – user574771

2

如果您已經閱讀文檔進一步,你會看到以下內容:

保存活動狀態

引入到管理活動的生命週期簡略的提到 ,當活動被暫停或停止,活動 的狀態被保留。這是事實,因爲活動對象在暫停或停止時仍保留在 內存中 - 有關其成員 和當前狀態的所有信息仍處於活動狀態。因此,用戶在活動中做出的任何更改都會保留在內存中,以便當活動 返回到前臺(當它「恢復」時),那些更改仍然是 。

但是,當系統銷燬一個活動以恢復內存時,活動對象被銷燬,因此係統不能簡單地以其狀態恢復其狀態並保持不變。相反,如果用戶導航回到該系統,系統必須重新創建活動對象 。然而,用戶 不知道系統破壞了活動並重新創建了活動,因此,可能期望活動與其完全相同。在此 的情況下,您可以確保通過實施其他回調 方法來保留有關 活動狀態的重要信息,該方法允許您保存有關活動狀態的信息,然後在系統重新創建 活動時將其恢復。

摘要:完成onStop()活動對象在內存中仍然存在。這將有助於系統恢復活動。

非常基本的例子:考慮你向用戶展示你的活動,突然你的朋友給你打電話!休息你可以理解..

所以,現在它取決於你,哪些資源/對象/連接應該釋放在哪個事件。

相關問題