首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >接收一个系统广播花了500ms的解决办法!

接收一个系统广播花了500ms的解决办法!

原创
作者头像
用户10171634
发布2025-08-21 17:54:59
发布2025-08-21 17:54:59
880
举报

接收一个系统广播花了500ms. 改成系统应用。

08-14 16:36:43.404 D/lfy ( 1386): [PhoneWindowManager] interceptKeyBeforeQueueing...发送android.intent.action.down...

08-14 16:36:43.404 W/ContextImpl( 1386): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1220 com.android.server.policy.PhoneWindowManager.interceptKeyBeforeQueueing:4389 com.android.server.wm.InputManagerCallback.interceptKeyBeforeQueueing:149 com.android.server.input.InputManagerService.interceptKeyBeforeQueueing:2476 <bottom of call stack>

08-14 16:36:43.406 E/ActivityManager( 1386): Sending non-protected broadcast android.intent.action.SCAN_KEY.down from system 1386:system/1000 pkg android

08-14 16:36:43.406 E/ActivityManager( 1386): java.lang.Throwable

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:14498)

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.broadcastIntentLockedTraced(ActivityManagerService.java:15323)

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:14562)

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:15540)

08-14 16:36:43.406 E/ActivityManager( 1386): at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1224)

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.policy.PhoneWindowManager.interceptKeyBeforeQueueing(PhoneWindowManager.java:4389)

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.wm.InputManagerCallback.interceptKeyBeforeQueueing(InputManagerCallback.java:149)

08-14 16:36:43.406 E/ActivityManager( 1386): at com.android.server.input.InputManagerService.interceptKeyBeforeQueueing(InputManagerService.java:2476)

08-14 16:36:43.410 E/lfy ( 1386): [PhoneWindowManager] getSpecialTestKeyItentActionForTestMode...keyCode = 754

08-14 16:36:43.599 D/WindowManager( 1386): interceptKeyTq keycode=754 interactive=true keyguardActive=false policyFlags=22000000 down =false canceled = false isWakeKey=false result = 1 useHapticFeedback = false isInjected = false

08-14 16:36:43.600 D/lfy ( 1386): [PhoneWindowManager] interceptKeyBeforeQueueing...发送android.intent.action.up...

08-14 16:36:43.600 W/ContextImpl( 1386): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1220 com.android.server.policy.PhoneWindowManager.interceptKeyBeforeQueueing:4389 com.android.server.wm.InputManagerCallback.interceptKeyBeforeQueueing:149 com.android.server.input.InputManagerService.interceptKeyBeforeQueueing:2476 <bottom of call stack>

08-14 16:36:43.602 E/ActivityManager( 1386): Sending non-protected broadcast android.intent.action.up from system 1386:system/1000 pkg android

08-14 16:36:43.602 E/ActivityManager( 1386): java.lang.Throwable

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:14498)

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.broadcastIntentLockedTraced(ActivityManagerService.java:15323)

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:14562)

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:15540)

08-14 16:36:43.602 E/ActivityManager( 1386): at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1224)

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.policy.PhoneWindowManager.interceptKeyBeforeQueueing(PhoneWindowManager.java:4389)

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.wm.InputManagerCallback.interceptKeyBeforeQueueing(InputManagerCallback.java:149)

08-14 16:36:43.602 E/ActivityManager( 1386): at com.android.server.input.InputManagerService.interceptKeyBeforeQueueing(InputManagerService.java:2476)

08-14 16:36:43.606 E/lfy ( 1386): [PhoneWindowManager] getSpecialTestKeyItentActionForTestMode...keyCode = 754

08-14 16:36:43.915 D/( 5128): onReceive: android.intent.action.down

08-14 16:36:43.915 D/( 5128): onReceive: 11111111

为什么变成系统应用后延迟就少了?

一旦你是系统应用(或特权应用):

  • AMS 会绕过某些限制逻辑(如 checkBroadcastFromSystem()isBackgroundRestricted()
  • 广播投递走的是高优通道
  • 如果广播是从系统进程直接发出来的(如你贴的 key 事件广播),对系统应用的处理是立即同步分发

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么变成系统应用后延迟就少了?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档