android 四大组件之 BroadcastReceive
前面我们已经讲过了 service 和activity, 这篇就谈谈BroadCastReceive。顾名思义就是广播接收。 在android手机系统里面,有很多广播,一些是系统广播,我们也可以自定义广播。有广播就有接收,系统可以接收,我们也可以实现自己的广播接收机制。自定义接收广播,也可以接收系统发出的广播。、
广播的作用是什么呢?通俗讲就像是电视台播放的节目一样,有很多电视台的电视节目,我们要做的就是打开电视机选择自己喜欢的节目就行。广播和service相似,都没有UI界面,但是广播可以启动一个activity或者一个service相应接收到的消息,或者使用NotificationManager通知手机用户。一般情况不会使用广播接收器处理比较耗时的工作,因为它的生命周期很短,只有10秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) 程序无响应的错误信息,所以建议的做法是通过intent传递给service去完成工作。
广播分为普通广播,有序广播,异步广播。
普通广播,通过Context.sendBroadcast(Intent myIntent)发送。
有序广播,通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;广播接收者接收广播时的级别(可通过intentfilter中的priority进行设置设为2147483647时优先级最高),同级别接收的先后是随机的, 再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播。
异步广播,通过Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要: <uses-permission android:name="android.permission.BROADCAST_STICKY" />权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动关闭。
广播和service,activity一样都要注册。广播可以在UI上通过代码注册,也可以通过在manifest文件里面注册。在UI上注册为动态注册,UI关闭,此时application就不能接收广播,另外一种称为静态注册,这种注册的有点是,只要手机处于工作状态,就算是没有开启application,广播还是有效的。所以这里就为我们提供了很大方便,可以后台处理启动service去处理很多工作。
浙公网安备 33010602011771号