广播接受者接收从sendBroadcast()这种类型的方法中发送过来的意图。
首先要先写一个类去继承BroadCastReceiver,然后重写 receive()方法
GOOGLE API中建议,如果广播不在进程间通信的话,建议使用LocalBroadcastManager,因为普通的广播可以跨进程。
LocalBroadcastManager
通过 getInstance(Context context) 返回一个实例
通过 registerReciver(Broadcastreceiver receiver, IntentFilter filter) 来注册广播
通过 sendBroadcast(Intent intent)方法发送广播
通过 unRegisterReceiver(BroadcastReceiver receiver)来注销一个广播
广义上的广播
分以下几个步骤:
1.发送广播
广播的发送有以下几种方式:
1.1 发送一个普通的广播(Normal Broadcasts) sendBroadCast(Intent intent),发送一个无序的广播,通过new Intent(String action)中的action来表示一个广播的特定行为,这样任何与之相匹配的广播接受者都能接受到这个广播,这种广播无法被截断。
1.2 发送一个有序的广播(Ordered Broadcasts) sendOrderedBroadCast(),发送一个有序的广播,广播按照优先级的顺序依次发送给接受者,一个接受者收到广播后,可以选择截断这个广播,让这个广播不再传输下去,或给这个广播追加结果并将追加的结果通过广播传输给下一个接受者。接受者的优先级是通过(android:priority)这个来规定的,数值越大,优先级越高
2.注册广播
两种注册方式:
2.1 在清单文件中注册:<receiver android:name="com.broadtest.MyReceiver3" android:exported="false">
<intent-filter android:priority="9">
<action android:name="orderSend"/>
</intent-filter>
</receiver>
<receiver android:name="com.broadtest.MyReceiver4" android:exported="false">
<intent-filter android:priority="8">
<action android:name="orderSend"/>
</intent-filter>
</receiver>
2.2 在代码中动态注册:
3.注销广播
注意,在activity中注册和注销广播的时候,其生命周期要一一对应,例如:如果在Activity 中的 oncreate()中注册,就要在onDestory()中注销,在onResume()中注册,就要在onPause()方法中注销,API建议在onResume()和onPause()中注册和注销,因为这样可以节省Android资源的开销
在使用广义广播的时候需要注意的问题:
1.安全问题:
1.1 注册接受者的时候,一定要 android:exported=”false”,否则这个接受者会接收任何符合 intentFilter规则的广播
1.2 要通过权限(清单文件---<user-permission>)来限制发送广播给任何程序的接受者,或者使用SDK14以上的版本中的 Intent.setPackage
2.广播的生命周期
广播只在receive(Context Intent)方法中有效,一旦出了这个方法,广播的生命周期就结束,大概的时间好像是10秒,所以不能在里面进行任何异步或者耗时的操作。
3.广播所在进程的生命周期
广播在生命周期的有效期内时,它只能在前台进程中运行,一旦广播结束,这个进程可能被杀掉,所以不能在这个进程中进行异步操作。