当前位置: 首页 > 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.cnnetsun.cn/news/1267568.html

相关文章:

  • M3U8视频下载技术平权:一场效率革命的普通用户指南
  • Qwen3.5-35B-AWQ-4bit多场景落地:跨境电商多语言包装识别+合规风险提示
  • 从零开始:用Thonny和ESP32玩转MicroPython,新手也能快速上手
  • Leather Dress Collection应用探索:服装设计师的AI灵感加速器
  • UEFI环境下单硬盘SSD系统无损迁移实战(CGI一键还原)
  • 【教程】Axure RP 9 超详细安装指南:从下载、汉化到授权配置(避坑必看)
  • Flutter 三方库 state_machine 鸿蒙适配指南 - 实现强类型有限状态机治理、在 OpenHarmony 上打造极致严谨的业务流转实战
  • springboot 文件下载
  • 零基础玩转Qwen3-1.7B:手把手教你用LangChain搭建智能对话机器人
  • MedGemma快速入门:三步启动,与你的AI医疗伙伴对话
  • 忘记PPT密码怎么办?巧用Tenorshare PassFab for PPT绿色版一键解除限制找回密码附工具教程
  • Switch自定义系统与优化完全指南:释放游戏设备潜能
  • 拯救被抛弃的Mac:2亿台老旧设备的逆袭之路
  • 什么是 Java 的 happens-before 规则?
  • Qwen2.5-VL-7B-Instruct一文详解:如何构造高质量多模态SFT训练数据
  • 智能硬件集成:SenseVoice-Small ONNX嵌入式设备语音识别方案
  • 深入解析fio:从基础使用到高级性能调优
  • ChatGPT私有化部署实战:从模型加载到API服务优化
  • 突破小爱音箱音乐限制:XiaoMusic自由播放解决方案全攻略
  • Flutter 三方库 ethiopian_datetime 鸿蒙适配指南 - 实现东非特殊历法转换、在 OpenHarmony 上打造全球化本地应用实战
  • 基于立创开发板与R7FA6E2BB3CNE的BH1750FVI光照传感器I2C驱动移植与数据采集实战
  • xxl-job升级避坑指南:2.2.0到2.3.1常见问题及解决方法
  • TTL与非门电路实战:从原理图到面包板搭建全流程(附常见问题排查)
  • 小龙虾(OpenClaw)配置第三方中转Api的完整图文教程
  • Dify 2026多模态向量对齐失败诊断图谱(含t-SNE可视化热力图+CLIP空间偏移校准公式)
  • 丹青识画系统在网络安全中的应用:恶意图像内容智能识别
  • java ssm基于J2EE线上医药用品分销系统设计与实现论文
  • ComfyUI-VideoHelperSuite高效实践指南:VHS_VideoCombine专业技巧与工作流优化
  • USB供电的宽量程高精度直流电流采集仪设计
  • Windows下Python报错:ModuleNotFoundError: No module named ‘readline‘的终极解决方案