Android的四大组件由activity,service,broadcast,contentprovider组成。
activity
其中activity是用户惟一能感知到的,是与用户的交互界面。activity的启动包括activitylaunch,activitycreate,activitystart,activityresume,activityon,activitypause,activitydestroy。涉及到启动第二个app时,会先执行第一个app的activitypause,再执行第二个app的activitycreate及后续步骤,最后执行第一个app的activitystop。当打开的新的app所需要的内存不能提供时,就会杀死之前打开的应用。下图为activity的生命周期图。
activity的四种工作模式
1、标准模式standard
这种模式简单来说就是不论你栈顶是啥activity,只要你点击都会从头开始创建activity,从oncreate开始到activityrunning。
2、栈顶复用模式
这种模式就是说,假如栈顶的activity,和你新点击的activity是同一个activity它就直接复用。
3、栈内复用模式
这种模式就是说,假如栈内包含新点击的activity,那么它就会这个activity上面的activity全部杀死,直接让这个activity为栈顶并复用。
4、SingleInstance 单实例模式
没咋看懂,但是几乎不用。
service
service没有相应的交互界面,所以在人们的日常使用中对service感知较弱。
service也分为前端服务和后端服务,前端服务如播放音乐,这个在前端是有界面的(但只是说是音乐app的界面,只不过通过这个你知道有service在为播放音乐服务),一般这种服务不容易被杀死,因为这样很影响用户体验。
service的后端服务比如内容的传输交互,比如微信消息的记录的电脑和手机的同时同步,这一般在后台中,在内存不足时很容易被杀死。
service的生命周期
service生命周期分为两种,第一种是启动service的,一种是bind类型的
第一种:首先是service oncreate,然后就是service startcommand,最后就是service destroy。与activity不同,service oncreate只会在第一次拉起来service时会调用后续就不会调用了;service startcommand执行此函数后service就会一直运行,除非手动关闭或者调用destroy。
第二种:同样是先oncreate,然后就是onbind了,这一步就是让组件和service建立联系,同时service必须提供一个ibinder这样才能正常与客户端建立联系。然后就是unonbind,其作用就是取消绑定嘛,当service没被任何client绑定时就会被destory。下图为service的生命周期图
broadcast
广播接收器用于响应来自其他应用程序或者系统的广播消息。这些消息有时被称为事件或者意图。例如,应用程序可以初始化广播来让其他的应用程序知道一些数据已经被下载到设备,并可以为他们所用。这样广播接收器可以定义适当的动作来拦截这些通信。
有以下两个重要的步骤来使系统的广播意图配合广播接收器工作。
创建广播接收器
广播接收器需要实现为BroadcastReceiver类的子类,并重写onReceive()方法来接收以Intent对象为参数的消息。
注册广播接收器
应用程序通过在AndroidManifest.xml中注册广播接收器来监听制定的广播意图。假设我们将要注册MyReceiver来监听系统产生的ACTION_BOOT_COMPLETED事件。该事件由Android系统的启动进程完成时发出。
contentprovider
content provider其主要作用就是提供一个共享文件供不同的应用程序使用。它允许在权限受限的应用程序中共享信息,contentprovider有独属于他的URL,假设有两个应用程序A和B,应用程序A希望与B共享一些数据。应用程序B可以创建一个Content Provider来管理这些数据,并通过定义合适的URI来让应用程序A进行访问。应用程序A可以通过Content Resolver查询、插入、更新和删除这些数据,而不需要直接访问应用程序B的数据库或文件。