2010-10-20 46 views
6

這似乎沒有很好的記錄或我錯過了,所以在我運行一堆我自己的測試之前,我想知道是否有人已經知道這些問題的答案。Android的Activity生命週期如何與整個應用程序相關聯?

首先,當我說「應用程序」我指的是擴展Application類。 http://developer.android.com/reference/android/app/Application.html

我的問題如下,有些是相關的。

  1. 當用戶離開活動從應用程序中,並進入到另一個應用程序的活動,並在應用某種方式得到暫停爲好,儘管它不具有的onPause()?還是在它的所有活動都被破壞之前繼續活下去?

  2. 什麼時候應用程序停止?當它所有的活動都被破壞了?

  3. 是否有過機會,該應用的活動之一可能沒有應用的實例在運行,或者如果活動之一確實將應用程序類總是存在嗎?

  4. 如果在應用程序運行的一些程序,它的活動都停了下來,將這一進程繼續運行?

  5. 該應用程序是以任何方式進行輪轉,還是僅以輪換方式更改活動? http://developer.android.com/reference/android/app/Activity.html

感謝

回答

7
  1. 正如你所說的應用程序沒有onPause,所以應用程序沒有任何反應。當你在Activity中調用onPause時,沒有什麼特別的事情發生,你的Activity繼續運行並且可以做任何想做的事情,包括運行新線程,定時器可以關閉,不管。

  2. 我相信你問的是:什麼時候應用程序被銷燬,什麼時候應用程序中的onTerminate方法被調用?答案很難精確定位並取決於系統,當所有活動都完成時,這並不一定會發生。事實上,即使在調用onDestroy時,您的活動也不一定是垃圾收集。當系統內存不足時,您的應用程序所在的進程可能會被終止,這意味着您的應用程序將消失; onTerminate可能會或可能不會被調用。當時所有的活動,服務等都被殺死了。

  3. 應用程序總是首先被實例化,一個Activity必須有一個關聯的應用程序,就像你在AndroidManifest.xml中定義它的方式一樣。

  4. 進程永遠不會在Android中暫停,onPause方法實際上並沒有做任何事情,除了告訴你在你的應用程序中暫停事物。除此之外,進程保持暢通,即使主線程使用BroadcastReceiver接收Intents,線程也會繼續運行。

  5. 應用程序在應用程序的onConfigurationChanged()中獲取旋轉回調。我不確定是否可以禁用它,因爲AndroidManifest.xml中沒有應用程序標記支持的configChanges屬性。

與應用程序的良好比較是任何類中的靜態字段。只要進程不被銷燬,靜態字段就會生存,就像應用程序一樣。所有活動,服務等都可以訪問靜態字段(假設靜態字段是公開的),就像您的應用程序一樣。

祝你好運! 雅各布

0

這是所有在這裏詳細解釋。如果你通讀它,你應該瞭解一切。

真正快速:

  1. 每個活動將OnPause。你可以選擇不重寫它,但它會被調用。一旦你離開,onPause將被調用。

  2. 定義「停止」。定義「應用程序」。這個過程可能會永遠留存下來,但它只會休眠並等待其中一項活動開始。

  3. 如果沒有實例化活動就不可能存在。

  4. 每個代碼執行進程中運行,所以總是有你的應用程序一個過程。切換到其他應用程序後,該過程將繼續存在,但它將處於睡眠狀態。如果系統資源不足,Android可以在任何時候終止進程。

  5. 你旋轉屏幕每一次,你的行爲將被銷燬並重新創建的,除非你明確禁用。

+1

我在問Application類(http://developer.android.com/reference/android/app/Application.html)而不是活動。我想知道應用程序類如何與其活動 – cottonBallPaws 2010-10-20 22:50:23

+0

的生命週期以及「停止」有什麼關係,我的意思是不再運行任何進程,並且/或者以活動可以訪問它的數據的方式存在於內存中。 – cottonBallPaws 2010-10-20 22:52:38

+0

讓我們這樣說:你想達到什麼目標,或者你想解決什麼問題?你需要什麼Application對象? – EboMike 2010-10-20 22:59:42

2

理解這個最簡單的方法就是忘記應用程序存在。應用程序與應用程序生命週期無關。它只是一個全球化的過程,對某些事物可能有用,但對任何事情都不需要。有關應用程序運行方式的一切都圍繞着.apk中聲明的Activity,BroadcastReceiver,Service和ContentProvider組件。

2

應用程序的一個實例可以在最後一個活動被銷燬後繼續存在。即使所有活動都沒有了(即所有活動都已經調用了onDestroy方法),Application實例仍可能存在。

此應用程序實例可以「重複使用」,否則您可能會認爲這是應用程序的兩次單獨運行。

相關問題