Android開發 第四課 應用程序的組成和生命週期

一、應用程序的組成部分


一般情況下,Android 應用程序由以下 4 種組件構成:

1.活動(Activity);

2.廣播接收器(BroadcastReceiver);

3.服務(Service);

4.內容提供者(Content Provider)

(1) 活動 (相當於ios中的View)

活動是最基本的 Android 應用程序組件,在應用程序中,一個活動通常就是一個單獨的用戶界面。每一個

活動都被實現爲一個獨立的類,並且從活動(Activity)基類中繼承而來,活動類將會顯示由視圖(View)控 件組成的用戶接口,並對事件(Event)做出響應。大多數的應用程序都會有多個用戶界面,因此便會有多個相 應的活動。

Android 的一個活動一般對應界面中的一個屏幕顯示,可以理解成一個界面,每一個活動在界面上可以包 含按鈕、文本框等多種可視的UI 元素。

(2)廣播接收器(BroadcastReceiver)

  廣播接收器用於讓應用程序對一個外部事件做出響應。例如:電話呼入事件、數據網絡可用通知或者到了

晚上時進行通知。


(3)服務(Service)

  一個服務是一個具有一段較長生命週期但沒有用戶界面的程序。例如:一個正在從播放列表中播放歌曲的

媒體播放器在後臺運行。


4)內容提供者(Content Provider)

應用程序能夠將它們的數據保存到文件或 SQLite 數據庫中,甚至是任何有效的設備中。當需要將數據與其 他的應用共享時,內容提供者將會很有用。一個內容提供者類實現了一組標準的方法,從而能夠讓其他應用程序 保存或讀取此內容提供者處理的各種數據類型。

二、應用程序的生命週期

Android 系統中的不同組件具有不同的生命週期。Android 根據每個進程中運行的組件以及組件的狀態把進 程放入一個重要性分級(importancehierarchy)中。Android進程的重要性分級,可以理解成執行的優先級。

(1)前臺(Foreground)進程 與用戶當前正在做的事情密切相關,不同的應用程序組件能夠通過不同的方法使它的宿主進程移到前臺。

當下面任何一個條件滿足時,都可以考慮將進程移到前臺。進程正在屏幕的最前端運行一個與用戶交互的Activity(它的onResume()方法被調用);進程有一個正在運行的BroadcastReceiver(它的BroadcastReceiver.onReceive()方法正在執行);進程有一個Service,並且在Service的某個方法(Service.onCreate()、Service.onStart()或者Service.onDestroy())

內有正在執行的代碼。(2)可見(Visible)進程它有一個可以被用戶從屏幕上看到的 Activity,但不在前臺—— onPause()方法被調用。例如:如果前臺

Activity 是一個對話框,以前的 Activity 隱藏在對話框之後,就可能出現這種進程。這樣的進程很重要,一 般不允許被殺死,除非爲了保證前臺進程的運行不得不這樣做。

(3)服務(Service)進程

有一個已經用 startService() 方法啓動的 Service,雖然這些進程用戶無法直接看到,但它們做的事情卻是用戶所關心的(例如:後臺 MP3 回放或後臺網絡數據的上傳/下載)。因此,系統將一直運行這些進程,除非內 存不足以維持所有的前臺進程和可見進程。

(4)後臺(Background)進程

擁有一個當前用戶看不到的 Activity(它的 onStop()方法被調用),這些進程對用戶體驗沒有直接的影響。如果它們正確執行了 Activity 生命週期,系統可以在任意時刻殺死進程來回收內存,並提供給前面3 種類型的 進程使用。系統中通常有很多這樣的進程在運行,因此要將這些進程保存在LRU 列表中,以確保當內存不足 時用戶最近看到的進程最後一個被殺死。

(5)空(Empty)進程

  不包含任何處於活動狀態的應用程序組件。保留這種進程的唯一原因是,當下次應用程序的某個組件需要

運行時,不需要重新創建進程,這樣可以提高啓動速度。

以上所說的“進程”是從系統運行的角度考慮的,各種不同的進程可以理解成 Android的各種組件的不同 狀態機(state machine)。如果從應用程序的代碼以及運行情況考慮,可以關注 Android 的各種組件相對應的生

命週期。


1.活動的生命週期活動是 Android 中最重要、最基礎的組件,用戶在界面上看到的一個個可以切換的屏幕界面就是Android

中的活動。活動的生命週期如圖 1 所示。

2. 服務的生命週期

服務可以長時間運行,它的特點是沒有可視化界面,服務的生命週期如圖 2所示。 



使用 StartService運行服務的情景:使用這種方法啓動服務,服務的onCreate()和 onStart()這兩個方法將被調用,服務會在後臺運行直到退出,退出時將調用onDestroy()方法。

使用 bindService運行服務的情景:使用這種方法啓動服務,調用者(也就是服務的客戶端)將獲得和服務交互的類,通過其調用時服務的相關內容會處於活動狀態。


3.廣播接收器的生命週期

廣播接收器有一個單一的回調方法 onReceive(),當廣播消息到達接收器時,Android將調用這個方法,並傳遞給包含在這個消息中的Intent對象。

廣播接收器只有在這個方法的執行過程中才處於活動狀態,當onReceive()返回後,廣播接收器將不再處於活動狀態。廣播接收器的功能類似於一個回調函數,只是單次運行時處於活動狀態。 



發佈了21 篇原創文章 · 獲贊 0 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章