標籤:android開發 android
第四章 Android開發三大基石—Activity、Service和Handler
學習Android開發,首先就不得不學習Activity和Service這兩個組件。Activity是有介面的程式,幾乎承載著使用者對應用程式的所有操作。而Service是沒有介面的程式,它是所謂的服務,也叫背景程式。掌握好它們,是我們學習Android開發必不可少的環節。Handler是Android開發中最常用的訊息機制,幾乎所有應用程式都會使用Handler傳遞訊息。可以說,想要學習Android應用開發,就不得不學習Activity、Service的開發,學習如何使用Handler機制。本章就來詳細介紹如何利用它們進行Android開發。
4.1 應用程式的介面—Activity視窗
Activity是Android中最基本也是最為常見的組件。它是Android的核心,是被用來與使用者及Android內部特性互動的組件,在應用程式中用到的所有Activity都需要在AndroidManifest.xml檔案中進行註冊。那麼Activity是怎樣一種組件,它是怎麼樣進行顯示互動的,一個Activity執行個體是如何被管理和運行起來的,Activity生命週期又是怎麼樣的?這些都是我們需要掌握的內容。
4.1.1Activity生命週期
在一個Android應用中,一個Activity通常就是一個單獨的螢幕,一個Activity的生命週期也就是它所在進程的生命週期。在 Android中,Activity 擁有四種基本狀態:
1)活動的(Active/Running) 一個新 Activity 啟動入棧後,它在螢幕最前端,處於棧的最頂端,此時它處於可見並可和使用者互動的啟用狀態;
2)暫停(Paused) 當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆蓋時的狀態。此時它依然與視窗管理器保持串連,系統繼續維護其內部狀態,所以它仍然可見,但它已經失去了焦點故不可與使用者互動;
3)停止(Stopped) 當Activity 被另外一個 Activity 覆蓋、失去焦點並不可見時處於 Stopped 狀態;
4)待用(Destroyed) 被系統殺死回收或者沒有被啟動時處於 Destroyed狀態。
Activity處於某一狀態是由系統來完成的,我們無法控制。但是,當一個Activity的狀態改變的時候,我們可以通過onXX()方法來擷取到相關的通知資訊。這樣,我們在實現Activity的時候,就可以通過覆蓋onXX()方法在需要的時候來調用它們,4-1所示:
圖4-1 Activity生命週期
Activity的完整生命週期自第一次調用onCreate()方法開始,直至調用onDestroy()方法為止。Activity的可視生命週期自onStart()方法調用開始,直到應用的onStop()方法調用結束。在此期間,使用者可以在螢幕看見Activity,儘管它也許並不位於前台或者也不與使用者進行互動。Activity的前台生命週期自onResume()方法調用起,至相應的onPause()結束。在此期間,Activity位於前台的最上面並與使用者進行互動。
經驗分享: 以上所說的都是正常情況下的Activity的生命週期。需要注意的是,系統可能因為記憶體不足等原因殺死某進程,當進程被殺死以後,所有的Activity都會被殺死。此時,onPause()是唯一一個在進程被殺死之前必然會調用的方法,onStop() 和 onDestroy() 都有可能不被執行。 |
4.1.2 Activity棧
我們知道,我們是無法控制Activity狀態的,那麼Activity的狀態又是按照何種邏輯來運作的呢?其實,Android 是通過一種 Activity 棧的方式來管理 Activity 的,一個 Activity 的執行個體的狀態決定它在棧中的位置。處於前台的 Activity 總是在棧的頂端,當前台的 Activity 因為異常或其它原因被銷毀時,處於棧第二層的 Activity 將被啟用,上浮到棧頂。當新的 Activity 啟動入棧時,原 Activity 會被壓入到棧的第二層。一個 Activity 在棧中的位置變化反映了它在不同狀態間的轉換。Activity 的狀態與它在棧中的位置關係4-2所示:
圖4-2 Activity棧
一個應用程式的優先順序是受最高優先順序的Activity影響的。當決定某個應用程式是否要終結去釋放資源,Android記憶體管理使用棧來決定基於Activity的應用程式的優先順序。
第四章 Android開發三大基石—Activity、Service和Handler(1)