一.广播优先顺序
Android广播有两个很重要的要素:
1 广播 - 用于发送广播
有序广播 - 被广播接收器接收后,可被终止,无法往下继续传达。 典型代表:短信广播
普通广播 - 发送至每一个已经注册(订阅)的广播接收器,无法被终止。 典型代表:开机启动广播
2 广播接收器 - 用于订阅广播后接收广播
静态注册广播 - 在AndroidManifest.xml中设置,程序不用启动亦可接收。 典型代表:很多开机启动的APP,都是接收开机启动广播带起服务的。
动态注册广播 - 代码中注册广播,程序未启动时,无法接收广播。 典型代表:Go短信,将Go短信强行停止,Go短信无法接收短信。
广播注册过程
接收广播顺序过程
在ActivityManagerService处理广播,当广播为有序广播时,将动态广播接收器和动态广播接收器合并起来,形成最终的有序广播接收顺序。
上述的
规则1排序为:
1 优先级高的先接收
2 同优先级的动静态广播接收器,动态优先于静态
3 同优先级的动态广播接收器 或者同优先级的静态广播接收器,按照图1 的流程注册顺序。
即静态:先扫描的大于后扫描的,动态:先注册的大于后注册的。
当广播为普通广播时,
规则2排序为:
1 无视优先级,动态广播接收器优先于静态广播接收器
2 同
规则1排序的第3点
二.基础问答
是谁控制着Activity的生命周期?
答:
是谁在背后操控这那个不靠谱的应用程序堆栈?
答:
为什么“程序无响应”总是冷不丁的 冒出来,他们来自哪里?
为什么我一定要在onPause里保存敏感数据?
该死的Binder,黑色面纱下面的你到底是男是女?
是谁杀死了我的 Service,怎样才能幸免遇难?
Activity被销毁后那些仍在运行的线程会怎样?
按下BACK键后,一定会回到主屏吗?
有人再说Looper和 Handler,一个进程只能有一个Looper是正的吗?