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。