Android 性能优化 【总篇:深入浅出】

本篇的主要针对整机性能的一个解读,主要拆解整机性能有哪些小的领域,对应的测试用例是怎么样的,这类问题优化思路是怎么样的。

各家厂商针对性能的测试都设计了不同的用例,因此针对性能测试其实是比较五花八门的。我这里凭着经验来总结一下通常都有哪些场景和性能测试相关。

1、基本功能

基本功能主要是针对某些特定场景下,例如唤醒速度、解锁速度、拍照、拨号等基本功能操作,所耗费的时间。这部分在某些厂家可能缺少相关案例,但是在某些厂家可能又会针对某个场景要求非常高。

因此这里并不打算详细解说这块内容,主要收集了如下几个案例:

|---------|-----------------------------------------|
| 优化项 | 优化措施描述 |
| 解锁速度优化 | 去掉解锁时的动画,直接进入桌面,提升解锁速度 |
| 桌面切换 | 缩短launcher页面切换动画时间,提升页面切换速度。 |
| 应用和通知显示 | 提前处理异步处理InstalledAppCounter耗时大循环,提升显示速度 |
| 电源键唤醒 | 减少lcd背光、TP等不必要的延时 |
| 电源键唤醒 | 将TP resume 过程放入 workqueue,减少 resume 时间 |

这类问题相对来说比较独立,例如解锁速度类问题分析,就需要fw对解锁这块流程有所研究,然后分析在什么阶段耗时;例如桌面切换就应该先给到launcher模块先分析一下代码是否异常。

2、开机时延

开机时延主要侧重方向是系统从按电源开机,到进入lancher界面,所花的时间。当然这个过程涉及到第一次开机,和非第一次开机等不同场景。虽然场景不一样,但是他们的分析思路都是一样的。Tinno的基础测试用例报告如下:

主要优化思路:减少启动项、异步加载、优化流程的执行耗时;

很多因素都会影响开机速度:

  • Debug日志较多耗时:删除debug日志、关闭UART日志
  • Dexopt应用太多耗时:跳过某些dexopt耗时特别多的应用
  • Preloadclass比较慢:精简preloadclass和异步加载class
  • 首次开机优化耗时:APK预编译

针对如上原因存在如下策略:

  • 删除开机过程中不需要的调试日志
  • 关闭串口日志
  • 首次开机跳过某些应用的预编译优化
  • 异步加载一些java类

详细细节参考

3、开机RAM/ROM

开机RAM是指的系统开机之后,RAM占用多少,可用RAM是多少,ROM占用给多少,可用ROM多少,这类问题需要我们使用一些基本命令来调试RAM/ROM。除此之外还需要我们对已占用的RAM/ROM进行拆分和澄清:

  • 已占用的RAM进行拆分:通常是查看所有进程包括内核占用内存的情况
  • 已占用的ROM进行拆分:通常是各个分区表的配置和各个分区占用空间的情况

4、系统跑分

跑分测试主要是针对CPU/GPU/MEM/UX等进行跑分,针对CPU/GPU跑分通常使用安兔兔等APK,关于MEM主要是对RAM/ROM读写相关测试,通常使用Benchmark或者FLASH等APK,UX一般使用3D等APK。

Tinno针对系统跑分的测试报告如下:

5、应用启动

6、滑动卡帧

7、游戏性能

相关推荐
plainGeekDev几秒前
ProGuard → R8
android·java·kotlin
雨白41 分钟前
C 语言字符串:从字符数组、指针到核心操作实战
android
Java小白笔记1 小时前
MySQL中存储过程大表分批删除历史数据
android·mysql·adb
aidou13142 小时前
Kotlin中沉浸式状态栏显示布局
android·kotlin·windowmanager·沉浸式状态栏·insetslistener·insetscompat·systembars
我命由我123452 小时前
Android 构建项目问题:XML 片段出错,com.ctc.wstx.exc.WstxUnexpectedCharException
android·xml·android studio·android jetpack·android-studio·android runtime
阿pin3 小时前
Android随笔-pipe是什么?
android·linux·pipe
帅次3 小时前
Android 高级工程师面试:Flow 与状态流 近1年高频追问 22 题
android·面试·职场和发展
雨季余静3 小时前
RustDesk Android APK 从零编译全步骤
android
辰合软件3 小时前
通达OA配置文件详解
android·adb
辰合软件3 小时前
通达OA目录结构与核心文件解析
android·数据库·oracle