android s静态广播,重走android(3)广播 · sk600’s Studio

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

广播作为android四大组件之一,应用非常广泛,主要通过intent这个“介质”来传递信息,可以完成多应用消息传递(即发送一个广播,多个应用程序可以接收到)。

应用场景用于同一个app中不同进程的不同组件之间通信。

app可能同时存在有多个进程,比如定位进程、主进程等等,那么两个进程之间通信可以采用广播。用于不同app的组件之间的通信。

广播种类Normal Broadcast: Context.sendBroadcast.

标准广播,这种广播是完全异步的,所有接受者几乎都是在同一时间接受到广播的,因此也是没有顺序的,所以广播是无法截断的Ordered Broadcast: Context.sendOrderedBroadcast.

有序广播,这种广播时有顺序的,同一时间只有一个广播接受者接受到广播,并且只有当前接受者的逻辑之行完毕后才能向后传递,既然有先后顺序,所以这种广播是有优先级的,优先级高的接受者先接受广播,并且可以截断广播阻止先后传播。Local Broadcast: 只在app内传播。

Broadcast Receiver

静态注册

静态注册,即在manifest文件中进行注册,注册后,这个receiver一直运行,即使activity死掉、甚至进程死掉后,还是能够接收到广播,即使这样,静态注册不够灵活。

动态注册

动态注册,即在使用时再注册,动态注册后,其生命周期与所在的activity一致,要注意,在activity的onDestroy方法中,使用unregisterReceiver方法。

广播内部实现机制自定义BroadcastReceiver复写onReceive()方法。

广播发送者也想AMS进行注册后,发送广播。

AMS根据广播查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,并将广播发送到对应的消息循环队列中。

消息循环执行拿到此广播,回调BroadcastReceiver的onReceive()方法。

LocalBroadcastManager

本地广播就是一种只在app内部传播消息的广播,比起全局广播,其传递消息的效率更高,安全性更好(不用担心内部数据泄漏等等),使用这种广播也无法接受到其他app对你发送的该广播,所以不会因为广播引起安全漏洞的问题。

LocalBroadcastManager之所以能够实现高效和app内部通信,主要是因为其消息传递使用了Handler,其发送消息主要是通过Handler的sendMessage,这样就不同于Binder机制,Handler效率比Binder快,而且只能用于app内部。

其主要靠两个HashMap(mReceivers和mActions)和一个ArrayList(mPendingBroadcasts)。这些在源码解析在这里。

其他BroadcastReceiver的onReceive方法不能执行耗时操作,若执行时间过长,会报错。

BroadcastReceiver是不能开启线程的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值