四大元件的工作過程
Android 四大元件分別是 Activity、Service、BroadcastReceiver 和 ContentProvider。
四大元件的執行狀態
- 除了 BroadcastReceiver 以外,其他三種元件都必須在 AndroidManifest 中註冊,而 BroadcastReceiver 既可以在 AndroidManifest 中註冊也可以通過程式碼動態註冊。
- Activity、Service 和 BroadcastReceiver 的呼叫都需要藉助 Intent,而 ContentProvider 卻不需要。
- Activity 是一種展示型元件,用於向用戶展示介面,可由顯式或者隱式 Intent 來觸發啟動。
- Service 是一種計算型元件,用於在後臺執行一系列計算任務。儘管 Service 是用於執行後臺計算的,但是它本身是執行在主執行緒中的,因此耗時的後臺計算仍然需要在單獨的執行緒中去完成。Service 元件有兩種狀態:啟動狀態和繫結狀態。當 Service 處於繫結狀態時,外界可以很方便地和 Service 進行通訊。
- BroadcastReceiver 是一種訊息型元件,用於在不同的元件乃至不同的應用之間傳遞訊息,它工作在系統內部。廣播有兩種註冊方式:靜態註冊和動態註冊。靜態註冊是在 AndroidManifest 中註冊,在應用安裝的時候會被系統解析,這種廣播不需要應用啟動就可以收到相應的廣播。動態註冊需要通過
Context.registerReceiver()
來註冊,通過Context.unRegisterReceiver()
來解除, 這種廣播需要應用啟動才能註冊並接收廣播。BroadcastReceiver 元件一般來說不需要停止,它也沒有停止的概念。 - ContentProvider 是一種資料共享型元件,用於向其他元件乃至其他應用共享資料。ContentProvider 中的
insert
、delete
、update
和query
方法需要處理好執行緒同步,因為這幾個方法是在 Binder 執行緒池中被呼叫的,另外 ContentProvider 元件也不需要手動停止。
Activity 的工作過程
Service 的工作過程
Service 有兩種工作狀態:一種是啟動狀態( startService
),主要用於執行後臺計算;一種是繫結狀態( bindService
),主要用於其他元件和 Service 的互動。需要注意的是,這兩種狀態是可以共存的。
啟動狀態
繫結狀態
BroadcastReceiver 的工作過程
簡單回顧下我們使用廣播接收器的過程:
onReceive registerReceiver
廣播的註冊過程
廣播註冊分為靜態註冊和動態註冊,其中靜態註冊是由 PackageManagerService 來完成整個註冊過程,當然其他三大元件也是這樣完成註冊的。
動態註冊過程
傳送和接收過程
- 廣播的傳送有幾種型別:普通廣播(Normal Broadcast)、系統廣播(System Broadcast)、有序廣播(Ordered Broadcast)、粘性廣播(Sticky Broadcast)和 App應用內廣播(Local Broadcast)。
- 從 Android 3.1 開始,處於停止狀態的應用無法接受到開機廣播。停止狀態分為兩種情況:一是應用安裝後未執行;二是應用被手動或者其他應用強停了。