Android 平台性能导致的性能案例,大佬分享开发经验

本文深入探讨了Android平台性能问题,包括CRTC执行耗时、CPU调度问题、后台活动进程过多等引起的卡顿。分析了SurfaceFlinger的掉帧、RenderThread在小核运行、大小核调度不当、System锁、Input报点不均匀等问题,并提出了相应的解决策略,旨在提升Android应用的性能和用户体验。
摘要由CSDN通过智能技术生成

image

四、CRTC 执行耗时


crtc 执行耗时的结果就是 SurfaceFlinger 下一帧不会做合成操作, 导致应用的 dequeueBuffer 和 setTransationState 方法被阻塞, 导致卡顿.

如下图, 可以看到 SurfaceFlinger 的掉帧情况, Binder 的阻塞情况 和 CRTC 的耗时情况

image

五、CPU 调度问题


###1.重要任务跑小核性能不足导致卡顿

如下图 , RenderThread 跑到了小核, 导致这一帧执行时间过长,造成卡顿图片:

image

如下图 , cpu 频率对性能的影响图片:

image

2.优先级低未能及时获取 cpu 时间片导致卡顿

在调度器看来的低优先级任务 , 在用户这里未必是低优先级任务 , 他可能正在和 App 的主线程交互 , 或者正在和 system_server 进行交互

3. 被 RT 进程抢占

App 主线程或者渲染线程被 RT 进程抢占也会导致系统卡顿或者响应慢 , Google 也意识到了这个问题 , 也在尝试在应用启动的时候 , 把 App 主线程和渲染线程的优先级也设置为 RT , 不过这个属性一直没开 , 因为会导致应用启动速度变慢.

4.大小核调度导致

大小核调度的问题通常表现在该跑在大核的任务跑到了小核 , 或者该在小核运行的任务却持续跑到大核 ,或者错误的被绑定在了某一个核心上 .

如下图, 这是一个 CTS 问题, CTS 主线程由于被绑定到了 cpu7 , 由于 cpu7 在执行 RenderThread , 所以主线程没有调度到, 导致 CTS 失败

image

六、触发 Thermal 导致限频


触发 Thermal 发热限频也有可能导致卡顿 , 这算是一种硬件级别的保护 , 如果手机已经过热 , 此时如果不进行干涉 ,

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值