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 的工做过程
但愿这篇文章对你有帮助~