1.概述html
a.Activityandroid
Intent intent=new Intent(xxx.this,xxx.class); startActivity(intent);
Intent intent=new Intent(); intent.setAction(xxx); intent.addCategory(xxx); startActivity(intent);
finish()
結束一個Activity。相關基礎:入門之Activity篇、開發藝術之Activityide
b.Service源碼分析
Intent intent = new Intent(xxx.this, xxx.class); startService(intent);
startService()
bindService()
unBindService()
和stopService()
徹底中止一個Service。相關基礎:入門之Service篇post
c.BroadcastReceiverthis
Context.registerReceiver()
& Context.unRegisterReceiver()
,必需要應用啓動才能註冊並接收廣播。Intent intent = new Intent("xxx"); sendBroadcast(intent);
相關基礎:入門之BroadcastReceiver篇spa
d.ContentProvider.net
insert()
:添加數據update()
:更新數據delete()
:刪除數據query()
:查詢數據相關基礎:入門之ContentProvider篇、IPC方式之ContentProvider線程
考考本身:android四大組件的運行狀態3d
二.工做過程
因爲相關源碼很是多,這裏借用@amurocrash的UML圖來提煉流程更爲直觀,另附相關源碼分析的文章供你們詳細瞭解。
a.Activity
Activity啓動過程流程圖:
結論:
ApplicationThread.scheduleLaunchActivity()
將啓動Activity的消息發送並交由Handler H處理。handleLaunchActivity()
->performLaunchActivity()
得以最終完成Activity的建立和啓動。源碼分析:Activity的工做過程
b.Service
結論:
Activity.attach()
和Activity創建關聯。Activity.attach()
中還會完成Window的建立並和Activity&Window的關聯,由此事件可傳遞給Window。ActivityThread.handleCreateService()
/ActivityThread.handleBindService
完成Service的啓動/綁定,注意綁定Service的後續還必須 告知客戶端已經成功鏈接Service 的這一流程,由ActivityManagerService.publishService()
去完成。源碼分析: Service的工做過程
c.ContentProvider
- 啓動的入口爲
ActivityThread.main()
:建立ActivityThread實例並建立主線程消息隊列;- ->
ActivityThread.attach()
:遠程調用AMS.attachApplication()
並提供ApplicationThread用於和AMS的通訊;- ->
AMS.attachApplication()
:經過ActivityThread.bindApplication()
方法和Handler H來調回ActivityThread.handleBindApplication()
;- ->
ActivityThread.handleBindApplication()
:先建立Application、再加載ContentProvider、最後回調Application.onCreate()
。
圖片來源:四大組件的工做過程
insert()
、delete()
和update()
相似,這裏不展開
結論:
ContentProvider.onCreate()
要先於Application.onCreate()
執行。ActivityThread.handleBindApplication()
完成ContentProvider的建立。源碼分析: ContentProvider的工做過程
d.BroadcastReceiver
結論:
ReceiverDispatcher .performReceive ()
裏回調了Receiver 的onReceive()
,使得廣播得以接收並處理。源碼分析: BroadcastReceiver 的工做過程
但願這篇文章對你有幫助~