转载原文:
返回知识列表:Android知识点list
broadcast 是拿锁的,所以一定将broadcast 操作,放在 handler 里处理,特别是在修改framework的代码的时候!! 【2020-07-01】
5 Receiver生命周期
Receiver何时产生
当系统或其它程序发出广播的时候,Android系统的包管理对象就会检查所有已安装的包中的配置文件有没有匹配的action,如果有,并且可以接收,那么就调用这个BroadcastReceiver,获取BroadcastReceiver对象,然后执行onReceiver()。BroadcastReceiver是在intent匹配后再实例化的,而且每次都是重新实例化的。
以上是说的静态注册Receiver。
一般的,广播持有者同时持有处于主线程,可以使用下面的方法来测试。(这里其实想说的是app开发中的receiver)
android.os.Process.myPid(); 获取进程号
Thread。currentThread().getId(); 获取线程号
onReceiver() 是在UI主线程中,所以不能执行耗时操作。
6 广播的类型
6.1 有序广播
有序广播(Ordered broadcasts)是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。
短信就是有序广播,所以才能拦截垃圾短信。
6.2 无序广播
标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此他们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。