前言:
1.继上篇“内存”,这篇讲述的是“CPU”和“启动时间”
2.准备工作,及如何获取进程PID,请参见上篇文章
一、查取android手机的整体CPU利用率
1、top命令
(1).打开cmd命令进入adb shell 环境
(2).输入 top -n 1 -d 5
2、命令分析
-m:最多显示多少个进程
-n:刷新次数
-d:刷新间隔(5s)
-s:按哪列排序
-t:显示线程,而不是进程
3、CPU占用率:User 28%, System 26%, IOW 0%, IRQ 0%
User:用户进程
System:系统进程
IOW:IO等待时间
IRQ:硬中断时间
4、CPU使用情况:User 320 + Nice 0 + Sys 297 + Idle 518 + IOW 2 + IRQ 1 + SIRQ 2 = 1140
User :处于用户态的运行时间,不包含优先值为负进程
Nice :优先值为负的进程所占用的CPU时间
Sys :处于核心态的运行时间
Idle : 除IO等待时间以外的其它等待时间
IOW IO:等待时间
SIRQ : 软中断时间
IRQ :硬中断时间
5、进程属性: PID PR CPU% S #THR VSS RSS PCY UID Name
PID :进程在系统中的ID
CPU% : 当前瞬时所以使用CPU占用率
S :进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
#THR :程序当前所用的线程数
VSS: 虚拟耗用内存(包含共享库占用的内存)
RSS: Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY:进程/线程的调度策略
UID :运行当前进程的用户id
Name:进程名称
二、查取某个应用的CPU占用情况
1、dumpsys cpuinfo命令
输入:dumpsys cpuinfo pid/包名
2.8%:总的CPU占用率
22370:PID
1% :在用户中花1%的时间
1.8%:在内核中花1.8%时间
三、启动时间:
1、概念:
冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。
首次启动:首次启动严格来说也是冷启动,之所以把首次启动单独列出来,一般来说,首次启动时间会比非首次启动要久,首次启动会做一些系统初始化工作,如缓存目录的生产,数据库的建立,SharedPreference的初始化,如果存在多 dex 和插件的情况下,首次启动会有一些特殊需要处理的逻辑,而且对启动速度有很大的影响,所以首次启动的速度非常重要,毕竟影响用户对 App 的第一映像。
am start -W packagename/activity 命令 (W大写)
通过 logcat -b events -s am_activity_launch_time 命令可获取包名和
activity
名WaitTime
:包括前一个应用 Activity
pause 的时间和新应用启动的时间,稍微大点。
TotalTime:
表示新应用启动的耗时,包括新进程的启动和 Activity
的启动,但不包括前一个应用Activity
pause的耗时(真正的启动耗时)
ThisTime
: 表示一连串启动 Activity
的最后一个 Activity
的启动耗时