Android四大组件详解

来源:互联网 发布:拜年视频制作软件 编辑:程序博客网 时间:2024/06/15 20:34

Android四大组件分别是:Activity,Service(服务),BroadcastReceiver(广播接收器),ContentProvider(内容提供者).


一.Activity:

Activity就是应用程序的一个界面,直接与用户交互并且接收用户操作去做出相应的响应.

Activity之间通过Intent进行通信.

使用Activity之前必须要在AndroidManifest.xml中进行注册,否则使用的话程序会不识别该Activity.

所有的运行的Activity都是保存在Activity栈里,Activity栈是由后进先出的规则,当你进入一个Activity,就把该Activity加入到栈顶,当你返回时就是把栈顶的Activity弹出.

Activity的加载模式有4种分别是: standard,singleTop,singleTask,singleInstance.加载模式可以在AndroidManifest.xml中的Activity节点设置launchMode.

standard模式:没设置的话默认就是standard,该模式就是每运行一个Activity就会产生一个新的实例.

singleTop模式:如果跳转一个Activity,栈顶已经存在这个Activity的实例的话,就会调用onNewIntent()不会重新创建实例.(栈顶就是你刚才操作的页面,比如A页面->B页面->C页面->C页面,这种情况就会调用C页面的onNewIntent(), 如果是A页面->B页面->C页面->B页面的话,这种情况还是再次创建B页面的实例.)

singleTask模式:这个模式下跟singleTask差不多,不过这个模式比较开放,Activity栈里只允许存在一个实例,就是跳转一个Activity,如果在Activity栈里已经有了该实例,那么就调用onNewIntent()不会重新创建实例.

singleInstance模式:这个模式用的很少,比较霸道,在这个模式下的Activity的Task中,不允许有其他实例了.

Acitivty的生命周期:

光看图片有点蒙可能,举例说明:

进入应用启动aActivity那么会依次调用onCreate()->onStart()->onResume() 那么现在aActivity现在就是正在运行状态,如果接收用户点击跳转到bActivity,那么会先调用aActivity的onPause()方法暂停,然后bActivity再依次调用onCreate()->onStart()->onResume() ,之后会调用onSaveInstanceState() (注:这个方法不在生命周期里,只是在Activity可能 会被系统杀死时,为了不让程序出现错误保存当前的状态,也就是使用Bundle保存重要变量,如果被杀死,再次返回时候 再次调用onCreate(Bundle),可以使用参数取出保存的状态) , 之后会调用aActivity的onStop()方法,这时如果用户点击返回,会先调用bActivitiy的onPause(),然后调用aActivity的onRestart()->onStart()->onResume(),然后调用bActivity的onStop()->onDestroy()方法销毁bActivity.


二.Service:

字面意思是指服务,说白了就是一个没有界面的Activity,相当于后勤,是在后台完成某种指定操作.

Service的启动方式有两种:

startService(开始服务):组件调用startService().

bindService(绑定服务):组件掉用bindService().

那么两种方式的区别是:

start: 组件掉用startService(),这时service会调用onStartCommand(),当service启动后,他的生命周期和启动它的组件就没有关系了,是自生自灭自己做事情,可以一直在后台运行下去,除非自己执行完任务自杀(在service里面调用stopSelf()),或者被杀(组件掉用stopService()).

bind:组件掉用bindService(),会返回给调用者一个IBind接口,调用者可以通过这个接口调用Service里面的方法,也就是调用者命令Service做什么事情,这是给调用者和Service牵上了红线,只要调用者GG了,那么Service也得殉情GG.

Service使用必须要在AndroidManifest.xml中注册使用(例如<service name="xx.xxx.xxx.MyService"></service>).

Service的生命周期是:

通过startService启动的是onCreate()->onStartCommand()->Service运行

  销毁则是调用stopService()时  ->onDestroy().

通过bindService启动是 onCreate()->onBind()->Service运行

调用者GG以后 onUnBind()->onDestroy.

三.BroadcastReceiver.

用于接收广播,也就是你想要监听的东西比如说网络的连接成功啊,来电话了啊,开机了啊,还可以自定义,然后发送广播啊...等等. 

广播分为2类:一种是正常广播(sendBroadcast()),是完全异步的,就像赛跑一样,谁跑的快谁先接收.第二种是有序广播(sendOrderedBroadcast),有序就是有顺序的就像买票一样,我买完你再买,也可以我买完关门,就是receiver执行完之后终止传播,receiver运行顺序可以通过intent-filter里面的priority来控制,如果priority相同时,就抢吧.

BroadcastReceiver生命周期就是onReceive方法,函数执行完就GG. BroadcastReceiver不能执行耗时操作他只存在10秒,而且他没有提供任何界面来显示广播信息,一般都是使用NotificationManager来发送通知并且震动.

广播注册的方式也有两种:

1.代码动态注册:context.registerReceiver()这样注册要在组件销毁时调用unRegisterReceiver()解除.

2.配置文件AndroidManifest.xml注册: 这种的会随系统的启动而活跃,只要接受到广播就会触发,就算程序没运行.


四.ContentProvider.

主要用于数据的共享.通过他把数据提供给别的应用程序使用,Android中有些系统的ContentProvider例如联系人,图库等.

主要使用方法是.

提供者实现ContentProvider去实现增删改查

接收者实现ContentResolver去调用Provider提供的数据


调用时是使用Uri来定位,使用content://开头,以表示数据是由ContentProvider来管理的,没怎么使用过,就用来获取了图库什么的.


四大组件就到这里,都是理论,具体还是要在代码里面自己领悟,用多了就理解了.

         

原创粉丝点击