美文网首页
接收开机广播缓慢

接收开机广播缓慢

作者: 小的橘子 | 来源:发表于2018-01-22 20:11 被阅读0次

    Android接收开机广播

    1. 注册广播

    可通过动态注册,但如果需要开机去做一件事,则必须静态注册

    <receiver android:name=".autoreboot.BootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>                       
        </intent-filter>         
    </receiver> 
    
    1. 添加权限
    <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没有对这个值做判断从而导致了这一个结果.

    相关文章

      网友评论

          本文标题:接收开机广播缓慢

          本文链接:https://www.haomeiwen.com/subject/fferaxtx.html