讀古今文學網 > Android程序設計:第2版 > 活動、意圖和任務 >

活動、意圖和任務

Android活動既是用戶交互單元(通常填滿Android移動設備的整個屏幕)也是執行單元。開發交互式的Android程序時,首先要繼承Activity類。Activity類提供了在Android應用中可重用、可交換的UI組件流。

那麼,一個活動如何調用另一個活動,如何將信息傳遞給第二個活動呢?不同活動之間的基本通信單元是Intent類。Intent類是一個抽像的功能描述,用來定義一個活動要求另一個活動執行的功能,類似於是第二個活動提供的功能的一張照片。Intent類是構建鬆散耦合的系統的基礎,它支持一個活動啟動另一個活動,並提供結果應用發佈Intent時,可能已經有幾個不同的已註冊的活動都能實現這個功能。

在其中一個抽像層,Android應用看起來和Web應用很相似。活動類似於Web應用中的servlet。設計良好的活動負責管理單個UI頁面,每個UI都有自己唯一的名稱。用戶根據這些鏈接,從Web頁面的一個頁面跳轉到另一個頁面,而在Android應用中,用戶交互是通過intent調用的。新頁面可以通過鏈接導航到老頁面。正如在Web應用世界中,有些servlet提供UI功能,其他的提供服務的API。因此,在Android世界中,活動提供UI,而Service和ContentProvider類(很快會介紹)提供對這些服務的訪問功能。理解這種架構上的相似性有助於充分有效利用Android框架設計Android應用。

在本書第1章中為驗證Android SDK是否正確安裝而創建test應用的過程中,我們已經「編寫」過了和活動相關的代碼。下面再一起來看看這段代碼:


public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
    }
}
  

當系統啟動這個活動時,它會首先調用Activity的子類TestActivity的構造函數,然後調用Activity的onCreate方法。這會加載並顯示在main.xml文件中定義的視圖結構(view hierarchy)。onCreate方法則開啟了Activity的生命週期,這在第10章會詳細說明。

Activity類是Android系統中最重要的類之一,支持應用的模塊化及功能共享。Activity會和Android運行時交互,以實現應用生命週期的關鍵部分。每個activity可以使用類Context獨立配置。

注意:和用object來表示類的實例很相似,我們使用活動來表示類Activity的實例。

在絕大多數情況下,一個Android應用中的每個活動都獨立於其他的活動。一個活動不會在代碼中直接調用另一個活動的方法。Android框架中的另外一個元素(Intent)負責通信。因此,不建議引用活動對象。Android運行時環境負責創建並管理應用的activity及其他各種組件,回收它們所使用的內存,以確保每個任務佔用的內存相對較少。你會發現專門對activity內存進行管理時,效率反而會非常低下。

警告:Android編程新手往往會禁止Android組件生命週期運行程序的Activity實例。實際上,嘗試通過引用Activity對像即時控制Android內存管理的方式是沒有意義的,而且會影響性能。

在Android中的用戶界面流控制,不是基於方法調用的。在其所採用的機制中,應用使用Intent描述清楚它想要的功能,系統負責找出一個匹配的實現。Android的Home桌面就是使用這些描述來啟動應用的,每個應用也可以按照自己的意願使用自己喜歡的intent來實現這種桌面功能。Android開發人員將這種結果流稱為「任務」(task):跨越多個應用的一組activity,而且實際上是多個進程。圖3-3顯示了跨越三個應用並涉及了多個活動的一個任務(表3-1給出的例子)。組成該任務的活動鏈跨越了三個獨立的進程和堆,它們可以相互獨立存在,其他應用也可能會為同一個Activity子類另外創建實例。

表3-1:一個簡單的任務實例,由多個應用的activity組成

圖3-3:一個任務中跨越了多個應用的多個活動