Android面试题:可以用广播来更新UI界面吗?

广播作为Android四大组件之一,是一种很好的解耦方案,常见的广播有这两种类型:

Normal broadcasts无序广播,会异步的发送给所有的Receiver,接收到广播的顺序是不确定的,有可能是同时。 Ordered broadcasts有序广播,广播会先发送给优先级高(android:priority)的Receiver,而且这个Receiver有权决定是继续发送到下一个Receiver或者是直接终止广播。

广播的注册有两种:动态和静态

如果不是频繁刷新界面,使用广播也是可以的,广播的发送和接收有一定的代价,它的传输是通过Binder进程通信机制来实现,同时广播的发送和接收不一定准时。AMS有个消息队列专门接收发送的广播,sendBroadcast执行后就被添加到消息队列,直接返回了不会等待处理结果,而消息队列不一定会被马上执行,当处理当前广播时,会把它分发给注册好的广播接收器ReceiverDispatcher,最后还是将广播交给给reciver所在的线程的消息队列去处理,如果中间有一个消息的处理阻塞了,那么onReceiver的执行也会延迟,所以尽量少使用广播更新界面。

基于安全考虑,如何让发送的广播只有本进程能接收到?

1、发送广播时设置权限,只有拥有这个权限的接收者才能收到。但是如果APK被反编译,该权限只是一个字符串,这样也是不安全的。 2、使用Handler(往主线程的MessageQueue发送消息,只有主线程的Handler可以分发处理)广播发送的内容是一个Intent对象,所以可以直接用Message封装一下,留一个和sendBroadcast一样的接口,然后在handleMessage时把Intent对象传递给已经注册的receiver,例如LocalBroadcastManager类

参考:# Android面试一天一题(2 Day)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值