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

深入探索Android卡顿优化(上)

(597条消息) 深入探索Android卡顿优化(上)_android 进程占用cpu时间过长_JsonChao的博客-CSDN博客

那么卡顿问题到底难在哪里呢?

1、卡顿产生的原因是错综复杂的,它涉及到代码、内存、绘制、IO、CPU等等。

2、线上的卡顿问题在线下是很难复现的,因为它与当时的场景是强相关的,比如说线上用户的磁盘IO空间不足了,它影响了磁盘IO的写入性能,所以导致卡顿。针对这种问题,我们最好在发现卡顿的时候尽量地去记录用户当时发生卡顿时的具体的场景信息。

2、卡顿分析方法之使用shell命令分析CPU耗时

尽管造成卡顿的原因有很多种,不过最终都会反映到CPU时间上。

CPU时间包含用户时间和系统时间。

用户时间:执行用户态应用程序代码所消耗的时间。

系统时间:执行内核态系统调用所消耗的时间,包括I/O、锁、中断和其它系统调用所消耗的时间。

CPU的问题大致可以分为以下三类:

1、CPU资源冗余使用

算法效率太低:明明可以遍历一次的却需要去遍历两次,主要出现在查找、排序、删除等环节。

没有使用cache:明明解码过一次的图片还去重复解码。

计算时使用的基本类型不对:明明使用int就足够,却要使用long,这会导致CPU的运算压力多出4倍。

2、CPU资源争抢

抢主线程的CPU资源:这是最常见的问题,并且在Android 6.0版本之前没有renderthread的时候,主线程的繁忙程度就决定了是否会引发用户的卡顿问题。

抢音视频的CPU资源:音视频编解码本身会消耗大量的CPU资源,并且其对于解码的速度是有硬性要求的,如果达不到就可能产生播放流畅度的问题。我们可以采取两种方式去优化:1、尽量排除非核心业务的消耗。2、优化自身的性能消耗,把CPU负载转化为GPU负载,如使用renderscript来处理视频中的影像信息。

大家平等,互相抢:比如在自定义的相册中,我开了20个线程做图片解码,那就是互相抢CPU了,结果就是会导致图片的显示速度非常慢。这简直就是三个和尚没水喝的典型案例。因此,在自定义线程池的时候我们需要按照系统核心数去控制线程数。

3、CPU资源利用率低

对于启动、界面切换、音视频编解码这些场景,为了保证其速度,我们需要去好好利用CPU。而导致无法充分利用CPU的因素,不仅有磁盘和网络I/O,还有锁操作、sleep等等。对于锁的优化,通常是尽可能地缩减锁的范围。

1、了解CPU 性能

————————————————

版权声明:本文为CSDN博主「JsonChao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_20798591/article/details/104259833


http://www.kler.cn/a/3335.html

相关文章:

  • 后端:MyBatis
  • Unity自学之旅05
  • 防火墙安全策略
  • iOS开发设计模式篇第二篇MVVM设计模式
  • WPF实战案例 | C# WPF实现大学选课系统
  • SQL-leetcode—1141. 查询近30天活跃用户数
  • AD/DA转换(XPT2046)
  • [oeasy]python0116_文字的起源_苏美尔文明_楔形文字_两河流域
  • 【数据结构】二叉树及相关习题详解
  • SANGFOR 旧防火墙配置怎么导入新防火墙
  • 【Python】虚拟环境及在VS Code当中的使用
  • 线程池的讲解和实现
  • 图形视图界面 图形效果
  • 【数据结构】树的介绍
  • 用队列实现栈(图示超详解哦)
  • GPT-4发布,这类人才告急,大厂月薪10W+疯抢
  • LeetCode算法 打家劫舍 和 打家劫舍II C++
  • ChatGPT新进展GPT-4 模型介绍
  • 【数据结构与算法】 - 线性表详解 - (带头结点)单链表详细实现思路及代码
  • 基于51单片机的自动打铃打鸣作息报时系统AT89C51数码管三极管时钟电路
  • Week 14
  • C/C++每日一练(20230325)
  • 【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私
  • Oracle-CDC进程同步报错问题合集
  • Android开发工程师想找工作需要掌握哪些
  • Pytorch中的图像增广和预处理方法(transforms类)