android.intent.action.BOOT_COMPLETED 被延迟接收问题

在系统开发中,遇到服务接收到android.intent.action.BOOT_COMPLETED广播延迟20多秒的情况,导致开机慢。经过跟踪源码,发现广播发送及时,问题出在接收广播的处理流程。在BroadcastQueue.java的processNextBroadcast函数中,服务因其他高优先级app和服务处理导致延迟。调整服务接收广播的优先级到最高,成功缩短开机时间。
摘要由CSDN通过智能技术生成

最近在系统开发中遇到某个系统服务接收 android.intent.action.BOOT_COMPLETED 广播被延迟接收的问题。

具体表现为开机后此服务过了20多秒才被启动,导致开机过慢。

在网上找了一下,没有找到比较好的解决办法,因此决定自己跟一下。

首先,找到发送这个广播的代码,位于 android/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java 文件中的 finishBooting() 方法中。

            if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
                // Start looking for apps that are abusing wake locks.
                Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
                mHandler.sendMessageDelayed(nmsg, POWER_CHECK_DELAY);
                // Tell anyone interested that we are done booting!
                SystemProperties.set("sys.boot_completed", "1");
                SystemProperties.set("dev.bootcomplete", "1");
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值