Android接收开机广播
- 注册广播
可通过动态注册,但如果需要开机去做一件事,则必须静态注册
<receiver android:name=".autoreboot.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
- 添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
这种接收广播方式的时间过长,一般在1min左右。
如何加快开机自启
-
系统开发人员
-
应用开发人员
<receiver android:name=".autoreboot.BootReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
提高priority为1000可以加快接收速度,但系统app的接收速度依然高于普通app。系统10s左右可以接收到,app端大概20s左右
但有的app例如360手机助手也可以做到更早的接收到开机广播,反编译发现其设置优先级数值有区别
<receiver android:name=".autoreboot.BootReceiver">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
通过给apk设置该优先级,我们的apk可以在10s左右接收到开机广播,从而大大提高自动速度。
将priority的优先级设置为了2147483647,这显然是不符合官方文档的要求。
在我们Android学习中我们知道当priority的值大于1000的时候会默认使用1000作为priority的值,但是2147483647确实实现了更早的将应用开启的效果,那么2147483647是什么值有这么大的威力呢,大家可以通过计算器得到,其实2147483647就是最大的int类型整数,很有可能是Android没有对这个值做判断从而导致了这一个结果.
网友评论