2012-03-29 32 views
14

我讀過幾個職位描述onStart()onResume()之間的區別:當活動變得可見onStart()被調用,當活動準備從用戶交互onResume()被調用。精細。android:何時使用onStart(),onStop()?

我一直只是將代碼添加到onPause()onResume(),並且從不爲onStart()onStop()打擾。

任何人都可以給一些具體的例子,你可能在onStart()onResume()做什麼? onStop()onPause()onStop()如何有用?我必須在這裏錯過一些基本的東西。

回答

9

onStop()會當你離開活動的一些其他活動(編輯(例如)被稱爲:幾乎看不到commonswares評論關於對話主題活動)。 例如,如果您在活動A中使用startActivity()開始活動B.當您在活動B中按回時,您將返回到活動A並且將調用onStart

這不同於某些原因可能會被調用而沒有調用onStop。例如,如果屏幕超時或者您按下了Standy按鈕將被調用,但可能不是onStop(取決於可用內存和內存),因此它是「更輕鬆的暫停」。即使在這種情況下,onStop可能最終會被調用,但不會立即。

好了,但有什麼用

通常沒有特定的用途,但也有可能。由於即使在開始其他活動後,活動仍會在堆棧上保留其內存狀態,因此該堆棧將隨着活動數量(堆棧高度)而增加。 這可能會導致在某些應用程序中使用大量內存。過了一段時間後,框架將踢入並殺死堆棧中的一些活動,但這非常鈍,可能意味着許多狀態在返回時保留。

因此,一個例子使用了onStart/onStop是,如果你想留下另一個活動時釋放一些狀態並重新創建它,當你回來。 我用它來設置listadapters爲null,空圖像緩存和類似的(在非常具體的應用程序)。如果您想釋放listadapter中可見視圖使用的內存,您可以在onstart中重新創建它,並讓gc拾取視圖。這將增加活動的其他記憶狀態的可能性。

一些資源可以被認爲不夠好,保存,而活動實例是活的,有的只當它是堆棧的前面。您需要決定什麼是最適合您的應用程序的,並且create/start/resume的粒度可以爲您提供幫助。

+2

「當你離開一些其他活動的活動時,onStop()將被調用」 - 實際上,當你的活動不再可見時它會被調用。如果以對話爲主題的活動進入前臺,則不調用「onStop()」。 – CommonsWare 2012-03-29 22:47:16

+0

好點。該示例中的調用活動在後臺可能仍然可見(並且回收的東西將會很糟糕)。我展示了它發生的地方以及我如何使用它來減少內存使用情況的示例,但這是一個很好的例外。一般來說它仍然很好。我還沒有看到一堆互相呼叫的對話活動。 – 2012-03-29 22:59:44

+0

噢,毫無疑問,以對話爲主題的活動並不常見。 – CommonsWare 2012-03-29 23:12:32

0

我覺得你的問題是相當這裏解釋的文檔:閱讀有關Activity Life Cycle

+0

'onStart()'在'onCreate()'結束其任務後工作。當您按下後退按鈕返回到您的「Intent」或「Activity」時,onResume()會起作用。 – 2012-03-29 22:14:20

+1

@Hamza,這是不正確的。只要您的活動從不可見到可見,就會調用onStart()。 – 2012-03-29 22:36:23

+0

沒有人!我在我的應用程序上做了onStart()。這是因爲,我想在加載活動後從webservice獲取數據。請查看Android Guide [鏈接](http://developer.android.com/reference/android/app/Activity.html) – 2012-03-29 22:45:24

1

onStart()在onCreate()結束其任務後工作。 這是一個放置broadcastReceiver或初始化UI的某個狀態的好地方,當用戶回到此活動時應始終顯示該狀態。當你回到你的意圖或活動按後退按鈕

的onResume()的作品。所以onPause會在每次有不同的活動出現在前臺時被調用。

相關問題