Android四大组件 - 广播机制使用解析

标准广播

是一种完全异步执行的广播,在广播发出后,所有的广播几乎会在同一时刻收到这条广播消息,它们之间没有任何先后顺序可言。它是无法被截断的
 标准广播

有序广播

是一种同步执行的广播,在广播发出后,同一时刻只有一个广播接收器能收到这条广播消息,当这个广播接收器的逻辑执行完毕后,广播才会继续传递。优先级高的广播可以先接到消息,它是可以被截断的,截断后后面的广播接收器将无法接收到广播消息
有序广播

动态注册广播

首先,我们先创建一个广播接收器,新建一个类然后继承自BroadcastReceiver,并重写父类的onReceiver()方法,有广播到来时,onReceiver()方法就会得到执行

class NetworkChangeReceiver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		
	}
}

当Android手机的网络发生变化时,系统会发出一条值为android.net.conn.CONNECTIVITY_CHANGE的广播。现在,我们想让我们的广播接收器监听这个广播,所以我们创建一个IntenFilter的实例,并给它添加一个值为android.net.conn.CONNECTIVITY_CHANGE的action。然后调用在Activity种调用registerReceiver()对广播接收器进行注册,该方法种传入NetworkChangeReceiver和 IntenFilter实例。这样我们的广播接收器就动态注册完成了。动态注册的广播接收器一定要取消注册,在Activity的onDestroy()方法中调用unregisterReceiver()。

静态注册广播

动态注册广播的缺点就是,必须要在程序启动之后才能接收到广播,因为注册逻辑是写在Activity中的,而静态注册就可以实现不需要启动程序也能接收广播。这里我们接收一条开机广播,同样的,我们需要先创建一个广播接收器

public class BootCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show();
    }
}

静态注册的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用,在文件中的application标签下加上

<receiver
	android:name=".MyBroadcastReceiver"
	android:enabled="true"
	android:exported="true">
        
</receiver>

可以看到上面是一个reciver标签,也就是我们需要注册的广播接收器,静态注册的广播接收器都是在AndroidManifest.xml文件下注册的,然后,我们给我们的广播接收器加上开机广播的action

<receiver
	android:name=".MyBroadcastReceiver"
	android:enabled="true"
	android:exported="true">
	<intent-filter>
		<action android:name="com.linjunhao.broadcasttest.MY_BROADCAST"/>
	</intent-filter>
</receiver>

这样我们的广播接收器就完成静态注册了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值