四大組件除了BroadCastReceiver都必須在清單文件中注冊
調(diào)用方式上 除了ContentProvider不需要intent外其他都需要在intent
Activity ? ?展示型組件
啟動方式 intent ?顯示和隱式 ?顯示意圖明確指向一個 隱式可以一個或多個activity組件舌剂;
Service 計算型組件 ?后臺執(zhí)行
兩種狀態(tài) 綁定和啟動 兩種狀態(tài)可以共存刺桃;
啟動狀態(tài)主要用來執(zhí)行后臺計算
綁定狀態(tài)主要用來其他組件和service的交互刽严;?
onCreate onStartCommand onDestroy方法;
onCreate方法只會調(diào)用一次;
遠程Service ?清單文件中的process屬性 ?設置為remote色鸳;
BroadCastReceiver ?消息型組件 ?沒有停止概念
注冊方式 ?靜態(tài)注冊和動態(tài)注冊兩種
BroadcastReceiver的工作過程包括廣播注冊過程、廣播發(fā)送和接收過程见转。
靜態(tài)注冊無論程序是否啟動都會接受廣播而動態(tài)注冊的廣播只有在當程序運行的時候才會接收到廣播信息
靜態(tài)注冊是由PackageManagerService(PMS)在應用安裝的時候完成整個注冊過程的命雀,
除廣播以外,其他三大組件也都是在應用安裝時由PMS解析并注冊的池户。
廣播的發(fā)送有幾種類型:普通廣播咏雌、有序廣播和粘性廣播,有序廣播和粘性廣播與普通廣播相比具有不同的特性校焦,但是發(fā)送和接收過程是類似的赊抖。
FLAG_INCLUDE_STOPPED_PACKAGES:廣播會發(fā)送給已經(jīng)停止的應用,F(xiàn)LAG_EXCLUDE_STOPPED_PACKAGES廣播不會發(fā)送給已經(jīng)停止的應用
從Android 3.1開始寨典,處于停止狀態(tài)的應用無法接受到開機廣播氛雪。
ContentProvider ?數(shù)據(jù)共享型組件?
內(nèi)部維持著一個數(shù)據(jù)型集合可以通過數(shù)據(jù)庫來實現(xiàn) 有增刪改查四種操作;不需要手動停止耸成;
當ContentProvider所在的進程啟動時报亩,會同時被啟動并被發(fā)布到AMS中,需要注意的是井氢,這個時候它的onCreate要先去Application的onCreate執(zhí)行弦追,這在四大組件中是一個少有的現(xiàn)象。
用啟動的入口為ActivityThread的 main方法花竞,main方法會創(chuàng)建ActivityThread實例并創(chuàng)建主線程消息隊列劲件。
attach方法中遠程調(diào)用AMS的attachApplication方法,并提供ApplicationThread用于和AMS的通信约急。
attachApplication方法會通過bindApplication方法和H來調(diào)回ActivityThread的handleBindApplication零远,這個方法會先創(chuàng)建Application,再加載ContentProvider厌蔽,然后才會回調(diào)Application的onCreate方法牵辣。
ContentProvider的multiprocess屬性決定了ContentProvider是否是單例(false時),一般都用單例奴饮。
ontentResolver的具體類是ApplicationContentResolver纬向,當ContentProvider所在進程未啟動時,第一次訪問它會觸發(fā)ContentProvider的創(chuàng)建以及進程啟動戴卜。
圖片來源與網(wǎng)絡