onStop()
會當你離開活動的一些其他活動(編輯(例如)被稱爲:幾乎看不到commonswares評論關於對話主題活動)。 例如,如果您在活動A中使用startActivity()
開始活動B.當您在活動B中按回時,您將返回到活動A並且將調用onStart
。
這不同於某些原因可能會被調用而沒有調用onStop
。例如,如果屏幕超時或者您按下了Standy按鈕將被調用,但可能不是onStop
(取決於可用內存和內存),因此它是「更輕鬆的暫停」。即使在這種情況下,onStop可能最終會被調用,但不會立即。
好了,但有什麼用
通常沒有特定的用途,但也有可能。由於即使在開始其他活動後,活動仍會在堆棧上保留其內存狀態,因此該堆棧將隨着活動數量(堆棧高度)而增加。 這可能會導致在某些應用程序中使用大量內存。過了一段時間後,框架將踢入並殺死堆棧中的一些活動,但這非常鈍,可能意味着許多狀態在返回時保留。
因此,一個例子使用了onStart/onStop
是,如果你想留下另一個活動時釋放一些狀態並重新創建它,當你回來。 我用它來設置listadapters爲null,空圖像緩存和類似的(在非常具體的應用程序)。如果您想釋放listadapter中可見視圖使用的內存,您可以在onstart中重新創建它,並讓gc拾取視圖。這將增加活動的其他記憶狀態的可能性。
一些資源可以被認爲不夠好,保存,而活動實例是活的,有的只當它是堆棧的前面。您需要決定什麼是最適合您的應用程序的,並且create/start/resume的粒度可以爲您提供幫助。
「當你離開一些其他活動的活動時,onStop()將被調用」 - 實際上,當你的活動不再可見時它會被調用。如果以對話爲主題的活動進入前臺,則不調用「onStop()」。 – CommonsWare 2012-03-29 22:47:16
好點。該示例中的調用活動在後臺可能仍然可見(並且回收的東西將會很糟糕)。我展示了它發生的地方以及我如何使用它來減少內存使用情況的示例,但這是一個很好的例外。一般來說它仍然很好。我還沒有看到一堆互相呼叫的對話活動。 – 2012-03-29 22:59:44
噢,毫無疑問,以對話爲主題的活動並不常見。 – CommonsWare 2012-03-29 23:12:32