关于APP接收开机广播延迟问题的

我们知道在Android中我们可以监听开机广播(android.intent.action.BOOT_COMPLETED)来实现开机自启动,当然能够实现开机自启动的前提条件是该应用至少已经被手动启动过一次,但是这样任然会出现一些问题,比如如果我们接收广播的优先级比较低那么我们开机之后APP启动就会比较靠后,但是既然设置为开机启动呢,那么我们肯定是希望自己的APP越早被启动越好的,基于这种情况我们可以调整接收广播的优先级,在官方文档中我们看到android:priority的默认值为0 取值范围围-1000到1000,priority的值与其等级是成正比的.但是在某些情况下我们发现即使将priority的等级设置为1000还是有些应用可以在我们之前启动,比如360手机助手,那么我们通过对360手机助手反编译查看其AndroidMainfest.xml文件来看发现360手机助手对其中一个监听开机广播的广播接受者的处理很有意思

      如下所示为360手机助手的相关代码

<receiver android:enabled="true" android:exported="true" android:name="com.qihoo.receiver.CoreBroadcastReceiver" android:process="com.qihoo.daemon">
    <intent-filter android:priority="2147483647">
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="com.qihoo.appstore.ACTION_DAEMON_CORE_SERVICE"/>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        <action android:name="android.intent.action.PHONE_STATE"/>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED"/>
        <action android:name="android.intent.action.PACKAGE_REPLACED"/>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
        <data android:scheme="package"/>
    </intent-filter>
</receiver>

在这段代码中我们可以看到他将priority的优先级设置为了2147483647,这显然是不符合官方文档的要求的在我们Android学习中我们知道当priority的值大于1000的时候会默认使用1000作为priority的值,但是2147483647确实实现了更早的将应用开启的效果.

猜你喜欢

转载自blog.csdn.net/u014379448/article/details/77241062