Android 广播阻塞、延迟问题分析方法
一、问题
最近遇到一个问题,发送广播(普通广播)给另一个应用,但是广播需要要等约1min后才收到。
二、分析原因
原因是系统有个广播接收器在接收到广播后处理了接近50s,所以阻塞了后面的广播处理。如果大家也出现了广播阻塞问题,想知道广播到底堵塞到哪里?这里先给大家分享下这个问题分析方法:
1、首先,串口设置输出log转存到a.txt文件中(名字随意取),然后在串口打印下面的指令,等一会将所有的广播信息收集起来。
dumpsys activity broadcasts
2、然后,根据自己堵塞的广播名称在a.txt文件进行过滤,如下代码所示,有三次发送。
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。
#102: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)+46s57ms dispatch +4ms finishenq=2023-08-09 11:20:36.769 disp=2023-08-09 11:21:22.826 fin=2023-08-09 11:21:22.830extras: Bundle[{STRIPPED=1}]#104: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)+50s426ms dispatch +4ms finishenq=2023-08-09 11:20:32.269 disp=2023-08-09 11:21:22.695 fin=2023-08-09 11:21:22.699extras: Bundle[{STRIPPED=1}]#207: act=com.xx.xxx.SHUTDOWN flg=0x10 (has extras)0 dispatch +5ms finishenq=2023-08-09 11:19:06.225 disp=2023-08-09 11:19:06.225 fin=2023-08-09 11:19:06.230extras: Bundle[{STRIPPED=1}]
4、然后在a.txt文件过滤dispatch关键字,在第三步分析在#104的时候出现了问题,从第二步可以看到#104出现在Line 10078行,然后在过滤出的dispatch的信息中,找到10078行,然后往下找,找到第一个时间比较长的广播,从下面log看,应该是Line 10132行的广播堵塞了,返回a.txt文件可以找到对应的广播信息。
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中有耗时操作的原因。
相关文章:
Android 广播阻塞、延迟问题分析方法
一、问题 最近遇到一个问题,发送广播(普通广播)给另一个应用,但是广播需要要等约1min后才收到。 二、分析原因 原因是系统有个广播接收器在接收到广播后处理了接近50s,所以阻塞了后面的广播处理。如果大家也出现了广…...
HTML JS 解析器出sql 中 的所有表名称,支持多条SQL
<!DOCTYPE html> <html> <head><title>SQL表名提取器</title><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script><script>function extractTableNames() {// 获取输入的SQL语句var sql document…...
【雕爷学编程】Arduino动手做(05)---热敏电阻模块之的基本参数、模块特色、电原理与使用说明
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...
MS31860T 国产 8通道串行接口低边驱动器 可PIN TO PIN替代DRV8860 高性价比
MS31860T 国产 8通道串行接口低边驱动器 可PIN TO PIN替代DRV8860 高性价比 产品简述 MS31860T 是一款 8 通道低边驱动器,包含 SPI 串口通信、 PWM斩波器配置、过流保护、短路保护、欠压锁定和过热关断功能,芯片可以读取每个通道的状态。MS31860T 可以…...
百度 amis 当成 UI 库用
百度 amis 当成 UI 库用 1.获取到这些 amis 对外提供的方法 var amisLib amisRequire(amis);// 获取到这些 amis 对外提供的方法。 2.js中使用百度amis中 confirm amisLib.confirm(amisLib 是否确认).then((confirmed) > {if (confirmed) {// 用户确认后执行的操作consol…...
质检工具(FindBugs、CheckStyle、Junit、Jmeter、Apifox)
1、Findbugs IDEA软件中可以装该插件,2018版本以前主要搜索FindBugs-IDEA 、2018版本以后主要搜索 SpotBugs。 1.1、FindBugs-IDEA安装及使用流程: 1.2、SpotBugs安装及使用流程: 2、Checkstyle IDEA软件中可以装该插件,所有版本的插件一致:CheckStyle 2.1、安装流程…...
MS31803TE 国产 四通道低边驱动器 PIN对PIN替代DRV8803
MS31803TE 国产 四通道低边驱动器 PIN对PIN替代DRV8803 产品简述 MS31803TE 是一个具有过流保护功能的 4 通道低边驱动器。MS31803TE 内置钳位二极管,用来钳制由电感负载续流产生的电压。MS31803TE 可以驱动单极步进电机、直流电机、继电器、螺线管或者其它负载。…...
wordpress数据表中标签和分类如何区分?
wordpress中标签和分类是什么关系怎么区分?最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中,然后我百度了下这个表的结构和相关介绍,发现果然如此,先把文章保存起来: wp_term_rela…...
css3 实现文字横幅无缝滚动
css3 实现文字横幅无缝滚动 使用 css3 关键帧 keyframes 和 animation 属性实现文字横幅无缝滚动。 <template><div class"skiHallBanner"><div class"skiHallBanner-text"><span>{{ text }}</span></div></div>…...
unity 修改默认脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; //***************************************** //创建人: xxxx //功能说明: //***************************************** #ROOTNAMESPACEBEGIN# public class #SCRI…...
【MySQL】增删查改基础
文章目录 一、创建操作1.1 单行插入1.2 多行插入1.3 插入否则替换更新1.4 替换replace 二、查询操作2.1 select查询2.2 where条件判断2.3 order by排序2.4 limit筛选分页结果 三、更新操作四、删除操作4.1 删除一列4.2 删除整张表数据 五、插入查询结果 CRUD : Create(创建), R…...
【vue+el-table+el-backtop】表格结合返回顶部使用,loading局部加载
效果图: 一. 表格结合返回顶部 二. 局部loading 解决方法: 一 返回顶部 target绑定滚动dom的父元素类名就可以了. 1.如果你的表格是 固定表头 的,那滚动dom的父元素类名就是 el-table__body-wrapper <el-backtop target".el-table__body-wrapper" :visibility…...
设计模式(4)装饰模式
一、介绍: 1、应用场景:把所需的功能按正确的顺序串联起来进行控制。动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法…...
Redis——通用命令介绍
Redis官方文档 redis官方文档 核心命令 set 将key和value存储到Redis中,key和value都是字符串 set key valueRedis中不区分大小写,字符串类型也不需要添加单引号或者双引号 get 根据key读取value,如果当前key不存在,则返回…...
EmberJS教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Ember.js 是一个开源 JavaScript框架,用于开发基于模型-视图-控制器( MVC)架构的大型客户端 Web 应用程序。 Ember 旨在减少开发时间和提高生产力,它是全球采用的增长最快的前端应用程序框架之一。它目前在许多网站上使用,例如 Squ…...
Diffusion扩散模型学习4——Stable Diffusion原理解析-inpaint修复图片为例
Diffusion扩散模型学习4——Stable Diffusion原理解析-inpaint修复图片为例 学习前言源码下载地址原理解析一、先验知识二、什么是inpaint三、Stable Diffusion中的inpaint1、开源的inpaint模型2、基于base模型inpaint 四、inpaint流程1、输入图片到隐空间的编码2、文本编码3、…...
dns的负载分配是什么
DNS 负载分配是使用 DNS 系统对传入的网络流量进行分配的一种技术。这可以是基于多种策略来分配的,从简单的轮询到更复杂的基于地理位置或服务器健康状况的分配。下面是 DNS 负载分配的几种常见形式: 轮询(Round Robin)࿱…...
adb 通过wifi连接手机
adb 通过wifi连接手机 1. 电脑通过USB线连接手机2. 手机开启USB调试模式,开启手机开发者模式3.手机开启USB调试模式 更多设置-》开发者选项-》USB调试4.点击Wi-Fi 高级设置,可以查看到手机Wi-Fi的IP地址,此IP地址adb命令后面的ip地址…...
将应用设置成系统App/获取Android设备SN号
1,和系统签名一致;(签名设置签名文件) 2,配置Manifest 至此你的App就是一个系统App了,可以执行一些系统App才能有的操作,如获取机器SN号: public String getSerialNumber() {Strin…...
2.CUDA 编程手册中文版---编程模型
2.编程模型 更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划 本章通过概述CUDA编程模型是如何在c中公开的,来介绍CUDA的主要概念。 编程接口中给出了对 CUDA C 的广泛描述。 本章…...
Servlet-JAVA【笔记】
JAVA_WEBTomcattomcat工作流程servlet的生命周期ServletConfigServletContextHttpServletRequestHttpServletResponse前端提交的数据和请求域里的数据的区别?应用域和请求域的区别?如何做到两个servlet之间交流/共享数据?请求转发和重定向区别…...
深度解析TFTP与FTP:核心区别、工作原理与应用场景
深度解析TFTP与FTP:核心区别、工作原理与应用场景摘要一、基础定义1.1 FTP 协议1.2 TFTP 协议二、TFTP 和 FTP 核心区别(表格对比)三、工作原理简要说明FTP 原理TFTP 原理四、TFTP 应用场景(最典型)1. **网络设备配置备…...
论文阅读:ICLR 2026 GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning
总目录 大模型相关研究 2025版:https://blog.csdn.net/WhiffeYF/article/details/142132328 总目录 大模型安全研究论文整理 2026年版:https://blog.csdn.net/WhiffeYF/article/details/159047894 https://openreview.net/forum?idRQm2KQTM5r GEPA&a…...
不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico亚
1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...
如何快速掌握DankDroneDownloader:无人机固件管理的完整指南
如何快速掌握DankDroneDownloader:无人机固件管理的完整指南 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader 当你想完全掌控自己的…...
为什么92%的PHP团队异步化失败?——高并发场景下I/O等待、内存泄漏与协程调度三大暗礁全曝光
第一章:PHP异步I/O的底层本质与失败全景图PHP 传统同步阻塞模型在 I/O 密集型场景中天然受限——每次 socket read/write、数据库查询或 HTTP 请求都会让整个进程挂起,直至内核返回结果。其底层本质并非缺乏异步能力,而是运行时(Z…...
3步颠覆《流放之路》角色构建:从数据混乱到精准规划的实战革命
3步颠覆《流放之路》角色构建:从数据混乱到精准规划的实战革命 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 当你在《流放之路》中第5次洗练装备属性却仍未达到预期效果,当…...
化工园区智慧巡检平台
化工园区智慧巡检平台概述化工园区智慧巡检平台通过物联网、大数据、人工智能等技术,实现巡检流程数字化、智能化,提升安全性和效率。平台通常涵盖设备监控、隐患识别、数据分析、应急响应等功能,助力园区管理降本增效。核心功能模块实时监控…...
PHP安全漏洞之文件包含与SSRF攻击全解析
在Web安全领域,PHP应用程序的安全问题一直备受关注。本文将深入探讨两种常见的PHP安全漏洞:文件包含漏洞和服务器端请求伪造(SSRF),帮助开发者理解漏洞原理、利用方式以及防御措施。 第一部分:文件包含漏洞详解 什么是文件包含漏洞…...
3步掌握microeco:微生物网络分析的完整指南
3步掌握microeco:微生物网络分析的完整指南 【免费下载链接】microeco An R package for data analysis in microbial community ecology 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 还在为复杂的微生物网络分析而头疼吗?面对海量的物…...
