对于android的广播机制一直不是特别清楚,今日就来聊聊他到底有啥!
1、分类
android广播接收器(BroadcastReceiver)可以分为2大类
标准广播:是完全异步执行的广播,小二理解为发散的那种,效率高,不可以拦截,没有顺序,各个广播接收器可以同时接收到。
有序广播:是一种同步执行的广播,是有先后顺寻的,直线似的,可以拦截。优先级高的就可以优先收到消息。
2、注册
android四大组件都需要注册,只有广播有两种注册方式(动态代码注册,静态在AndroidManifest.xml中注册),其他三个在AndroidManifest.xml静态注册。
3、创建广播接收器
如何创建广播接收器?
需要新建一个类,让他继承BroadcastReceiver,并且需要重写onReceive()方法。有广播到来时,onReceive()方法就会执行,具体的逻辑可以再该方法中处理。
3、例子--实现一个检测网络变化发出的广播(动态注册实例)
广播接收类
classNetworkChangeReceicerextendsBroadcastReceiver {
@Override
public voidonReceive(Context context,Intent intent) {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info !=null&& info.isAvailable()) {
Toast.makeText(context,"网络可用,请继续!",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context,"网络不可用,请检查网络!",Toast.LENGTH_LONG).show();
}
}
}
接下来需要在活动onCreate()方法中,创建一个IntentFilter的实例,给他添加一个action("android.net.conn.CONNECTIVITY_CHANGE")的值,
创建广播接收器的类的实例,然后调用
registerReceiver(receicer,filter)进行注册。
这样就可以了,记得需要在onDestriy()方法中调用unregisterReceiver(receicer);来取消注册的广播。
因为动态注册的广播接收器一定都要取消才可以。