[](()2. 是否使用过本地广播,它和全局广播有什么差别?
引入本地广播的机制是为了解决安全性的问题:
1) 正在发送的广播不会脱离应用程序,比用担心 app 的数据泄露;
2) 其他的程序无法发送到我的应用程序内部,不担心安全漏洞。(比如:如何做一个杀 不死的服务—监听火的 app 比如微信、友盟、极光的广播,来启动自己。)
3) 发送本地广播比发送全局的广播高效。(全局广播要维护的广播集合表 效率更低。 全局广播,意味着可以跨进程,就需要底层的支持。)
本地广播不能用静态注册。----静态注册:可以做到程序停止后还能监听。 使用:
(1) 注册:
LocalBroadcastManager.getInstance(this).registerReceiver(new XXXBroadCastReceiver(), new IntentFilter(action));
(2) 取消注册:
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiv er)
[](()3. 是否使用过 IntentService,作用是什么, AIDL 解决了什么问 题? (小米)
如果有一个任务,可以分成很多个子任务,需要按照顺序来完成,如果需要放到一个服 务中完成,那么使用 IntentService 是最好的选择。
一般我们所使用的 Service 是运行在主线程当中的,所以在 service 里面编写耗时的操 作代码,则会卡主线程会 ANR。为了解决这样的问题,谷歌引入了 IntentService. IntentService 的优点:
(1) 它创建一个独立的工作线程来处理所有一个一个 intent。
(2) 创建了一个工作队列,来逐个发送 intent 给 onHandleIntent()
(3) 不需要主动调用 stopSelf()来结束服务,因为源码里面自己实现了自动关闭。
(4) 默认实现了 onBind()返回的 null。
(5) 默认实现的 onStartCommand()的目的是将 intent 插入到工作队列。
总结:使用 IntentService 的好处有哪些。首先,省去了手动开线程的麻烦;第二,不 用手动停止 service;第三,由于设计了工作队列,可以启动多次—startService(), 但是只有一个 service 实例和一个工作线程。一个一个熟悉怒执行。
AIDL 解决了什么问题?
AIDL 的全称:Android Interfac