app无法响应开机广播

app无法响应开机广播或者静态广播

  • 开机广播
    • 广播自我检查

开机广播

部分app会有开机要求自启动功能。通过监听系统的开机广播,可以轻松实现该功能。但是我遇到了开机广播经常无法响应的情况,在网上也看了很多大神的分析。在这分享一下我遇到的情况,解决方法。

广播自我检查

  1. 必须申请权限

这里我们是开机广播,就申请监听开机广播的权限


  1. app安装完成后,需要首次启动

Android 3.1以后,app在安装后,必须主动启动,注册静态开机广播后,之后才可以收到开机广播。详细官方描述。
因为系统的package manager增加了对处于“stopped state”应用的管理。“stopped state”指的是安装后从来没有启动过的应用。并且系统广播默认不会唤起处于“stopped state”的应用。

注意,系统级别的app不需要这些操作,直接就可以获取开机广播

  1. 检查app是否正常响应开机广播

有可能是代码问题,导致未收到广播,或者未作响应处理。我们可以模拟系统来发送一下广播。指令如下:

adb shell am broadcast -a 
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
  1. 查看系统是否发送开机广播

极少部分系统会不发送开机广播。我们可以查看一下发送广播的记录,指令如下:

dumpsys |grep BroadcastRecord

打印内容从上到下,是按照从新到旧的顺序排列的,也就是说第一行是系统最新发出的一个广播。

  1. 最后的倔强

我遇到的问题,app启动后,立即关机重启,app无法收到开机广播。最后发现把app启动后,运行了10~20秒后,重启系统后,app就可以收到开机广播了。我查看源码分析,静态广播注册过程中,有耗时操作,可能是立即关机时,该app开机广播还未注册到系统内。

最后,欢迎大家指点补充。

你可能感兴趣的:(开发遇坑记录)