目錄
- 1 四大組件的運行狀態
- 2 Activity 的作業程序
- 2.1 Activity 的啟動程序
- 3 Service 的作業程序
- 3.1 Service 有哪兩種作業狀態?這兩種狀態可以共存嗎?
- 3.2 Service 的啟動程序
- 3.3 Service 的系結程序
- 3.4 Service 和 Thread 的關系是什么?
- 4 BroadcastReceiver 的作業程序
- 4.1 BroadcastReceiver的動態注冊,發送和接收程序
- 4.2 靜態注冊的廣播接收者和動態注冊的廣播接收者在接收廣播時,實體會不會重新創建?
- 5 ContentProvider 的作業程序
- 5.1 ContentProvider的啟動程序和資料操作方法呼叫程序
- 參考
由于 Android 的內部實作多數都比較復雜,在研究內部實作上應該更加側重于對整體流程的把握,而不能深入代碼細節不能自拔,太深入代碼細節往往會導致“只見樹木不見森林”的狀態,處于這種狀態下,無法對整體流程建立足夠的認識,取而代之的是煩瑣的代碼細節,但是代碼細節本身并不具有太多的指導意義,因此這種學習狀態是要極力避免的,但凡事不是絕對的,如果開發者從事的作業是 Android Rom 開發,那底層代碼細節還是要有所涉獵的,
1 四大組件的運行狀態
| 對比項 | Activity | Service | BroadcastReceiver | ContentProvider |
|---|---|---|---|---|
| 注冊方式 | 必須在 AndroidManifest中注冊 | 必須在 AndroidManifest中注冊 | 可以在 AndroidManifest中注冊,也可以在代碼中注冊 | 必須在 AndroidManifest中注冊 |
| 呼叫方式 | 需要借助 Intent(顯式 Intent 和隱式 Intent) | 需要借助 Intent | 需要借助 Intent | 不需要借助 Intent |
| 組件定位 | 展示型組件 | 計算型組件 | 訊息型組件 | 資料共享型組件 |
| 停止方式 | 呼叫 Activity 的 finish 方法來結束一個 Activity 組件的運行 | 需要采用 stopService 和 unBindService 停止一個 Service 組件 | 沒有停止的概念 | 不需要手動停止 |
| 啟動 Api | startActivity | startService,bindService | 動態注冊:registerReceiver,發送廣播:Context 的 send 方法 | 無 |
| 注意的點 | 沒有 Activity 來處理某個隱式 Intent 時,要處理 ActivityNotFoundException | Service 本身時運行在主執行緒中的,所以耗時的后臺計算仍然需要在單獨的執行緒中去做,不要把 Service 和 Thread 混同了, | 動態注冊廣播和解除注冊廣播要成對出現,BroadcastReceiver 不適合用來執行耗時操作 | ContentProvider 的 onCreate 方法運行在主執行緒里,所以不能在 onCreate 方法里做耗時操作;ContentProvider 的 insert,delete,update 和 query 方法在 Binder 執行緒池中被呼叫,因此需要處理好執行緒同步 |
2 Activity 的作業程序
2.1 Activity 的啟動程序
查看筆者的文章: Android筑基——Activity的啟動程序之在一個Activity中啟動另一個Activity(基于api21)
3 Service 的作業程序
3.1 Service 有哪兩種作業狀態?這兩種狀態可以共存嗎?
一種是啟動狀態,主要用于執行后臺計算;一種是系結狀態,主要用于其他組件和 Service 的互動,
Service 的這兩種作業狀態是可以共存的,即 Service 既可以處于啟動狀態也可以同時處于系結狀態,
3.2 Service 的啟動程序
查看筆者的文章:Android筑基——Service的啟動程序之同行程啟動(基于api21)
3.3 Service 的系結程序
查看筆者的文章:Android筑基——Service的系結程序之跨行程系結(基于api21)
3.4 Service 和 Thread 的關系是什么?
Service 和 Thread 之間沒有任何關系,
Thread 用于開啟一個子執行緒,在里面執行一些耗時操作,這樣就不會阻塞主執行緒的運行了;Service 主要用來處理后臺任務,但是 Service 是運行在主執行緒的,需要說明的是,Service 處理后臺任務里的"后臺",是指 Android 的后臺,即不依賴于 UI 的,
4 BroadcastReceiver 的作業程序
4.1 BroadcastReceiver的動態注冊,發送和接收程序
查看筆者的文章:Android筑基——BroadcastReceiver 的動態注冊、發送和接收程序(基于api21)
4.2 靜態注冊的廣播接收者和動態注冊的廣播接收者在接收廣播時,實體會不會重新創建?
靜態注冊的廣播接收者每次接收廣播,實體都會重新創建;
動態注冊的廣播接收者每次接收廣播,實體都不會重新創建,
5 ContentProvider 的作業程序
5.1 ContentProvider的啟動程序和資料操作方法呼叫程序
查看筆者的文章:Android筑基——ContentProvider 的跨行程啟動程序和資料操作方法呼叫程序(基于api21)
參考
- ActivityManagerService資料結構Activity堆疊管理(二)
- android Activity啟動程序(二)從ActivityManagerService的startActivity到堆疊頂Activity的onPause程序
- android Activity啟動程序(三)從堆疊頂Activity的onPause到啟動activityon的Resume程序
- Android Service完全決議,關于服務你所需知道的一切(上)-郭霖
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402779.html
標籤:其他
上一篇:【Groovy】Groovy 方法呼叫 ( Java 中函式引數是介面型別 | 函式引數是介面型別 可以 直接傳遞閉包 )
下一篇:Android開發復用代碼
