上面所说即:若App的TargetSDK达到了26, 我们正常静态注册的广播就没有用了。能用的仅有以下豁免的Broadcast, 包括我们自己正常发广播,如果不指定包名, 静态注册的也是收不到的。PS:动态注册是没有影响的
在我们收不到广播的时候,系统会有如下打印,即这个后台的广播接收器不会被执行
04-21 04:12:27.513 2431 4821 W BroadcastQueue: Background execution not allowed:******************
如何应对这一限制
知道了上面的限制后,我们正常的应对方式为
能动态注册,就不静态注册
如果一定要静态注册, 发送的时候指定包名,即发送显式广播
如果要接收系统广播,而对应的广播在Android8.0中无法被接收,那么只能暂时把App的targetSdkVersion改为25或以下,但这招已经不顶用了,工信部要求targetSDK必须26以上
如果我们不想发显式广播(因为我们不知道有谁要收广播),对方又不能动态注册,只能静态注册(许多应用希望是被动唤醒),我们应该怎么办呢?
我们看上面的异常:
04-21 04:12:27.513 2431 4821 W BroadcastQueue: Background execution not allowed:******************
这行log是哪边打印的呢?
我们去搜索一下:http://androidxref.com/
代码里面有个skip变量是用来标志是否跳过的,很显然1275行打印出来了,skip为true了那就, 我们不希望这个判断能够进去。
那么如合让判