BroadcastReceiver 有序广播

来源:互联网 发布:js获取屏幕高度 编辑:程序博客网 时间:2024/06/01 20:01

BroadcastReceive是一种全局监听器,实现BroadcastReceive需要BroadcastReceive的onReceive()方法。

实现过BroadcastReceive之后,是注册监听器,有两种方式

1.代码注册

IntentFilter intent=new IntentFilter("XXX ");

BroadcastReceive1  cast1=new BroadcastReceive1();

registerReceiver(cast1,intent);

2.xml注册

<receiver android:name="MyReceive2">
               <intent-filter android:priority="0">
                   <action android:name="com.example.action.ORDERBROADCAST" />
               </intent-filter>
           </receiver>

不要在BroadcastReceive中写一些耗时的操作,如果onReceive()方法在10秒未完成则会抛错ANR

如果非要写耗时操作,可以在BroadcastReceive中让intent打开一个service来完成,不考虑使用新线程去完成这个耗时的操作,因为BroadcastReceive本身生命周期很短,BroadcastReceive所在进程结束了,可是那个新线程没结束就可能在内存紧张时,系统把那没人要的新线程给杀死。



广播分为两类:普通广播  有序广播

对于有序广播,activity自从开启广播,该广播会按照优先级一个个传下去,如果被高优先级的方法给终止了,比它优先级低的将都收不到该广播了,activity可以将自己的需要传递的数据通过intent给传给各个广播监听者,而广播监听者BroadcastReceive则可以将需要传递的数据放到Bundle中去,通过setResultExtras(Bundle),然后后续的较低级广播监听者们通过getResultExtras(true)得到数据Bundle();

==注意的是:Activity只能通过intent,不能通过Bundle  。而BroadcastReceive只能通过Bundle 不同通过intent  来传递数据,否则得到的数据为nul。

0 0
原创粉丝点击