最近在系统开发中遇到某个系统服务接收 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");