广播机制

Android中的广播有两种类型:标准广播和有序广播。标准广播完全异步,广播接收器之间无先后顺序,无法被截断。有序广播同步执行,也就是同一时刻只有一个广播接收器接收广播消息,这个广播接收器逻辑执行完毕后才会继续传递,有先后顺序,并且在前面的广播接收器还可以截断广播。

广播:发送广播和接收广播。发送广播可以用Intent,接收广播Broadcast Receiver。广播接收器先注册广播,当广播发出之后,才会接收到该广播。注册广播有两种:动态注册(在代码中注册)和静态注册(在AndroidManifest.xml中注册)。新建一个类,继承BroadcastReceiver,并重写onReceiver()方法(接收广播,可以加具体的逻辑,但不要添加太多的逻辑或进行耗时的操作,因为在广播接收器中是不允许开启线程的。onReceiver()方法运行太长时间没有结束时会报错。)就创建广播接收器了。

动态注册:onCreate()中调用registerReceiver()方法,在onDestroy()中调用unregisterReceiver()方法取消注册。优点:自由地控制注册与注销,很灵活。缺点:在程序启动后才能接收广播。解决:静态的广播接收器——程序未启动的情况下就能接收广播。

静态注册:在AndroidManifest.xml中<manifest/>标签中添加权限<uses-permission android:name="对应接收广播的权限"/>。

发送自定义广播:1>发送标准广播,sendBroadcast(intent)方法;2>发送有序广播,sendOrderedBroadcast(intent,null)方法,第二个参数是与权限相关的字符串,在注册的时候,<application/>中<receiver/>标签中添加<intent-filter android:priority ="100"/>,设定广播接收器的先后顺序,还可以在广播接收器中选择是否让该广播继续传递,可以在onReceive()中添加abortBroadcast()方法阶截断广播。

使用本地广播:解决广播的安全性问题,使用本地广播机制发出的广播只能在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。实现:使用LocalBroadcastManager(类)管理广播,并提供了发送广播和注册广播接收器的方法。本地广播无法通过静态注册方式来接收。优势:明确知道正在发送的广播只在程序范围内,不必担心机密数据泄漏;其他程序无法将广播发送到程序内部,不必担心安全漏洞;发送本地广播比发送系统全局广播更高效。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值