Android 广播阻塞、延迟问题分析方法

一、问题

最近遇到一个问题,发送广播(普通广播)给另一个应用,但是广播需要要等约1min后才收到。

二、分析原因

原因是系统有个广播接收器在接收到广播后处理了接近50s,所以阻塞了后面的广播处理。如果大家也出现了广播阻塞问题,想知道广播到底堵塞到哪里?这里先给大家分享下这个问题分析方法:

1、首先,串口设置输出log转存到a.txt文件中(名字随意取),然后在串口打印下面的指令,等一会将所有的广播信息收集起来。

java 复制代码
dumpsys activity broadcasts

2、然后,根据自己堵塞的广播名称在a.txt文件进行过滤,如下代码所示,有三次发送。

java 复制代码
Line 10070:   #102: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)
Line 10078:   #104: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)
Line 11031:   #207: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)

3、根据过滤出的三次广播信息,每一条挨个返回a.txt原log中查看下处理的时间,原log信息如下。从时间上看,第一次#207是正常的,在#104的时候出现了问题,耗时:50s426ms。

java 复制代码
#102: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)
    +46s57ms dispatch +4ms finish
    enq=2023-08-09 11:20:36.769 disp=2023-08-09 11:21:22.826 fin=2023-08-09 11:21:22.830
    extras: Bundle[{STRIPPED=1}]
    
#104: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)
    +50s426ms dispatch +4ms finish
    enq=2023-08-09 11:20:32.269 disp=2023-08-09 11:21:22.695 fin=2023-08-09 11:21:22.699
    extras: Bundle[{STRIPPED=1}]
    
#207: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)
    0 dispatch +5ms finish
    enq=2023-08-09 11:19:06.225 disp=2023-08-09 11:19:06.225 fin=2023-08-09 11:19:06.230
    extras: Bundle[{STRIPPED=1}]

4、然后在a.txt文件过滤dispatch关键字,在第三步分析在#104的时候出现了问题,从第二步可以看到#104出现在Line 10078行,然后在过滤出的dispatch的信息中,找到10078行,然后往下找,找到第一个时间比较长的广播,从下面log看,应该是Line 10132行的广播堵塞了,返回a.txt文件可以找到对应的广播信息。

java 复制代码
Line 10071:     +46s57ms dispatch +4ms finish
Line 10075:     +48s292ms dispatch +127ms finish
Line 10079:     +50s426ms dispatch +4ms finish
Line 10083:     +53s166ms dispatch +121ms finish
...
Line 10132:     +48s652ms dispatch +43s360ms finish
Line 10135:     0 dispatch 0 finish
Line 10178:     0 dispatch +1ms finish

5、找到堵塞的广播后,以该广播为关键字在a.txt文件中再次进行筛选,可找到注册该广播的包名,进而可以找到堵塞的进程和应用。此时备注下log分析,把bug分出去就行了。这也是为啥,不能再onReceive中有耗时操作的原因。

相关推荐
蓝天下的守望者6 分钟前
ARM SOC architecture学习文档整理
arm开发·学习
脚踏实地,坚持不懈!10 分钟前
Android 系统工程师(性能/功耗/稳定性)岗位问题深度解析:从内核源码到实战排查(完善版)
android·linux·运维·服务器
Kapaseker15 分钟前
适配小米“中”折屏,非得买一台吗
android·kotlin
恋猫de小郭20 分钟前
Flutter 状态管理基准测评,一个很有趣的观点
android·前端·flutter
可乐鸡翅yeah_22 分钟前
App WebView 加载 M3U8 流媒体踩坑,安卓 iOS 混合开发播放异常定位
android·ios·harmonyos·m3u8·m3u8在线播放
木卫四科技1 小时前
从函数劫持到智能体控制平面:Hook 如何从 Linux-Android 演化到 Agent Runtime
android·linux·人工智能·安全
菠萝加点糖1 小时前
Android applicationIdSuffix 详解
android·gitee·kotlin
叶子野格1 小时前
《Verilog学习:前置知识》
学习·fpga开发
wuyk5551 小时前
从零吃透 MQTT 通信|第 6 章 MQTT 主题、过滤器、通配符、订阅管理、拒收机制详解与代码实现
c语言·stm32·学习
AIGC小尼1 小时前
穿山甲 + 腾讯短剧短视频聚合广告平台|Android+SpringBoot+Vue+Docker 完整部署指南
android·vue.js·spring boot·聚合广告·广告平台·穿山甲广告·腾讯广告