当前位置: 首页 > news >正文

Android应用长时间进入退出后会出现hwuiTask0和hwuiTask1占用CPU过高导致界面卡顿问题

问题描述

Android 应用在高频率压测进入和退出过程中,会出现在进入3秒左右会出现界面卡断问题。随着压测时间延长,卡顿问题会越来越严重,最终导致在卡顿期间点击应用界面会出现ANR崩溃问题。
日志显示卡顿时出现:“OpenGLRenderer: Davey! duration=2000ms”

问题排查

1 top命令查看,发现卡顿时应用CPU占用会由正常70%飙升到220%左右
2 top -H -p 、ps -T -p 命令查看应用的全部线程情况,其中关键是出现hwuiTask0和 hwuiTask1CPU占用率居高不下,且会继续攀升并在进入应用时更加高的情况
3 dumpsys meminfo 命令查看,应用内存占用情况没有异常
4 dumpsy meminfo 命令查看,没有发现有系统内存异常或Lazy RAM异常占用情况
5 如果在应用进入后停止触发退出,应用不会卡顿
6 底层库打印没有看到有异常延迟情况
根据以上方式,大致能判断到应该是某些UI切换导致,但具体是什么判断不出来。
手动点击应用上任意图标时,发现点击某个特定图标或点击应用特定区域会复现到完全一样的卡顿情况。
根据点击某个特定图标或点击应用特定区域,追溯代码和功能逻辑,此时响应的是特定区域中View的显隐切换。单纯显隐切换不至于造成如此严重卡顿,怀疑显隐切换中触发了高频绘制。

问题定位

在确定是特定区域View的显隐切换后,通过代码以500ms频率触发显隐切换。10多分钟就出现了延迟现象。通过日志确认到是一个简单的自定义View造成。
该自定义View逻辑很简单,就是在onDraw()里面绘制四条path,并将其使用LinearShader填充。观察发现LinearShader每次都是new临时变量,怀疑是这个导致,将其提取到 onSizeChanged()中初始化后,压测还是有同样问题。
观察path, 发现每次绘制,path 都会执行 moveTo(), lineTo(), close() 操作,怀疑是这里有问题,问AI,提示:

核心原因:Path 内部的指令序列会随 onDraw() 调用无限累积,导致内存持续增长、绘制耗时指数级增加,最终引发卡顿 / ANR; 核心解决方案:在 onDraw() 中构建新路径前,调用 path.reset() 清空旧指令,确保每次只绘制当前所需的路径; 关键优化:复用 Path 成员变量(避免 new Path())、优先使用 reset() 而非 rewind(),进一步降低性能损耗。

问题解决

按提示增加 reset()方法后,压测问题已解决,hwuiTask0和hwuiTask1始终为0,不会增加。
同时按照提示,将path的路径构建也移到onSizeChange()中,进一步降低性能损耗

http://www.jsqmd.com/news/474063/

相关文章:

  • UEFI环境下单硬盘SSD系统无损迁移实战(CGI一键还原)
  • 抖音视频资源管理新范式:douyin-downloader的技术实现与场景落地
  • YOLOv10与BotSORT融合:打造高效自定义数据集多目标跟踪方案
  • CH32V307-MPU6050模块移植
  • 开源电商ERP系统实战:多平台订单管理与库存联动全解析
  • OFA VQA模型真实推理展示:多轮提问一致性、细粒度描述能力
  • lite-avatar形象库GPU优化:针对RTX 3090/4090显卡的推理性能调优指南
  • 工业视觉新选择:基于XILINX FPGA的2000帧高速相机采集方案全解析
  • 抖音视频批量下载全攻略:高效管理个人视频资源的技术实践
  • 揭秘大数据领域分布式计算的性能优化策略
  • GitLab Runner实战:构建你的专属自动化流水线
  • Windows平台下利用MSYS2编译安装Axel实现高效多线程下载
  • Qt界面状态指示器:用QLabel打造动态红绿灯与LED灯效
  • RexUniNLUGPU算力优化:梯度检查点+FlashAttention-2使长文本处理显存下降55%
  • Java自学:语法篇1——运算符
  • 基于Python的酒店推荐系统的设计与实现
  • OpenClaw 安装与配置教程
  • AutoCAD Electrical 2022元件插入全攻略:从图标菜单到批量操作技巧
  • MySQL启动报错2002?3分钟搞定localhost连接失败的终极解决方案
  • 3D打印机的定量铺粉器设计cad10张+三维图+设计书明说
  • notebooklm-py:把 NotebookLM 放到你的程序中
  • 快速上手DeerFlow:图文并茂的部署教程,新手友好,5分钟即可开始使用
  • 解锁MacBook Pro Touch Bar:Windows系统下的功能重生指南
  • 软考中级-软件设计师 2023下半年真题实战拆解:数据流图与UML建模核心考点精讲
  • iLabPower BIMS V2.6开启实验室动物管理「全维可视化」时代
  • Ostrakon-VL-8B真实案例:某快餐品牌用其完成全国2300家门店月度AI巡检
  • StructBERT中文通用模型部署教程:Supervisor开机自启+健康检查+日志监控一体化
  • 彻底搞懂 C 语言二级指针:从原理到实战(两种实现方式对比)
  • idea使用教程
  • Qwen2.5-7B-Instruct实现智能运维:日志分析与故障预测