Android 在KITKAT 4.4.2中连续处理引导完成广播<;操作_引导_完成>&书信电报;ActivityManagerService.java>;
在最新的安卓版本中,动作启动完成广播的发送方式似乎发生了非常重要的变化。 在JB 4.3中,引导完成广播是并行处理的。其中,如KK 4.4.2所示,其被连续处理。 这会延迟启动后服务的启动 由于谷歌的这一改变,我的服务启动在启动完成后被延迟。 人们可以观察到设备变得迟钝,触摸音频无法播放。所有这些都是因为各自的服务启动较晚 此外,从日志中我看到,在发送操作\u BOOT\u完成后,第一个接收操作\u BOOT\u的人在16-19秒后接收操作,而在JBP上,接收队列中的第一个人几乎不需要10毫秒就可以获得操作 任何知道这一变化的人都可以解释这一变化的原因吗。 这将是一个很大的帮助Android 在KITKAT 4.4.2中连续处理引导完成广播<;操作_引导_完成>&书信电报;ActivityManagerService.java>;,android,performance,initialization,broadcastreceiver,boot,Android,Performance,Initialization,Broadcastreceiver,Boot,在最新的安卓版本中,动作启动完成广播的发送方式似乎发生了非常重要的变化。 在JB 4.3中,引导完成广播是并行处理的。其中,如KK 4.4.2所示,其被连续处理。 这会延迟启动后服务的启动 由于谷歌的这一改变,我的服务启动在启动完成后被延迟。 人们可以观察到设备变得迟钝,触摸音频无法播放。所有这些都是因为各自的服务启动较晚 此外,从日志中我看到,在发送操作\u BOOT\u完成后,第一个接收操作\u BOOT\u的人在16-19秒后接收操作,而在JBP上,接收队列中的第一个人几乎不需要10毫
非常感谢 这个变化是@hackbod做的,也许她可以解释一下原因 她的登记单上写着: 完成问题#10779747:观察到日历存储崩溃 …从“设置”设置新用户时 当有足够的后台服务时,我们现在可以延迟广播 当前正在启动(对于苗条设备,仍然设置为1,对于正常设备,设置为3 设备) 添加新的意图标志以不允许接收器中止广播,这 我用于修复初始引导未完成的问题 实际上在正确的时间请求pss数据——现在可以发送了 作为一种有序的广播,而不允许接收者取消 它
是的,我现在遇到了这个问题。 BOOT_COMPLETED ordered=true,许多服务运行延迟很长时间。 如果我删除了所有的GMS应用程序,就可以了。因为太多的GMS应用程序注册了启动完成的广播
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这似乎是一只虫子。因为如果我编写一个演示应用程序来接收如上所述完成的引导,错误的问题将再次出现
我已经检查了@hackbod的修改。除了修改从真到假的顺序,我没有任何想法。
等待@hackbod的回复 您可以尝试修改以下代码 在frameworks\base\services\java\com\android\server\am\ActivityManagerService.java中(第1974行): 发件人: 致: 另一个解决方案是在finishBooting()的ActivityManagerService.java中,将动作\u BOOT\u COMPLETED intent设置为“FLAG\u RECEIVER\u NO\u ABORT”:
final void finishBooting() {
...
Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT);
//add FLAG_RECEIVER_FOREGROUND to force the intent in foreground
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
......
}
由于没有人知道这一变化的原因及其影响,安卓问题跟踪系统已经报告了这一问题。链接-希望得到答案。谢谢
mBgBroadcastQueue = new BroadcastQueue(this, "background", BROADCAST_BG_TIMEOUT, true);
mBgBroadcastQueue = new BroadcastQueue(this, "background", BROADCAST_BG_TIMEOUT, false);
final void finishBooting() {
...
Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT);
//add FLAG_RECEIVER_FOREGROUND to force the intent in foreground
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
......
}