首页 > 代码库 > Android 2014年1月22日

Android 2014年1月22日

一.广播优先顺序

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是正的吗?