前段时间因为项目需求,用到了Android基础的广播接收机制,简要做点总结
1.静态广播
静态广播需要在AndroidManifest.xml中进行声明,而且不针对特定的页面,任何页面都能收到广播消息。
注册用例如下:
<receiver android:name=".ui.balance.broadcastReceiver.WeighBroadcast"> //广播名 <intent-filter> <action android:name="XXXXX"/> //广播消息注册 </intent-filter> </receiver>静态广播接收的使用如下:
public class WeighBroadcast extends BroadcastReceiver { //定义广播接收器 private static int NOTIFY_ID = 1000; private static final String tag = "NotificationReceiver"; @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show(); //收到广播之后需要执行的命令 // }2. 动态广播
注册用例如下:本例选择在Activity的onCreate()函数中进行注册
myBroadcastReceiver = new MyBroadcastReceiver(); //广播类的创建 intentFilter1 = new IntentFilter(); intentFilter1.addAction(XXXXX); //动态注册广播 registerReceiver(myBroadcastReceiver, intentFilter1);动态广播注册之后需要销毁,本例选择在onPause()函数中销毁
@Override public void onPause() { super.onPause(); // unregisterReceiver(changeReceiver); unregisterReceiver(myBroadcastReceiver); //注销动态广播接收器 // unregisterReceiver(dataBroadcastReceiver); }动态广播接收的使用如下:
class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show(); //接收广播消息后需要执行的命令 } }
3.动态广播接收器和静态广播接收器的比较
- 生存期:静态广播的生存期比动态广播的长很多,因为静态广播很多都是用来对系统时间进行监听,而动态广播会随着context的终止而终止
- 优先级:动态广播的优先级比静态广播高
- 动态广播无需在AndroidManifest.xml中声明即可直接使用,也即动态;而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明