adb命令:官方参考网址:https://developer.android.google.cn/studio/command-line/adb?hl=zh-cn#-t-option
1、adb shell dumpsys meminfo 包名.apk ——查看指定包名应用内存使用情况
adb shell dumpsys meminfo com.ifeng.news2
=======================================================================
2、adb shell dumpsys cpuinfo —— 监控cpu
adb shell dumpsys cpuinfo |findstr com.ifeng.news2
================================================================================
3、adb shell dumpsys battery —— 监控耗电变化,查看电池状态
==================================================================
4、adb shell am force-stop com.ifeng.news2 ——强制杀死某个进程,强制停止APP进程,不会清除APP进程在系统中产生的数据
adb shell pm clear com.ifeng.news2 ——停止APP进程,并且清除这个APP进程产生的所有数据,相当于reset
执行该命令后输出success即表示命令执行成功,app进程被杀死,且会清楚所有数据,
相当于卸载重装的效果,一般不建议使用。
====================================================================================================================
一、ps命令详细说明
1,ps的命令参数:-t -x,-P,-p,-c [pid|name]
-t显示进程下的线程列表
-x 显示进程耗费的用户时间和系统时间,单位s
-P 显示调度策略,通过是bg or fg ,当获取失败将会un和er比之前打印的内容多出了一列PCY,表示进程的调度等级
-p 显示进程的优先级和nice等级
-c 显示进程耗费的CPU时间
[PID]过滤指定进程PID,[name]过滤指定进程NAME
2,直接使用ps:
各列参数的意思:
USER:进程当前用户;
PID(Process Id):当前进程id;
PPID(Process Parent ID):父进程ID;
VSIZE(Virtual Size):当前进程虚拟内存的大小;
RSS(Resident Set Size):实际驻留在内存中的没存大小;
WCHAN:休眠进程在内核中的地址;
PC(program counter):计算机中提供要从[存储器]中取出的下一个指令地址的[寄存器];
NAME:进程状态值及名称;(这个状态不知道根据什么区分的,试了下没有参考价值)
进程状态:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
W - 进入内存交换(从内核2.6开始无效)
X - 死掉的进程
< - 高优先级
N - 低优先级
L - 有些页被锁进内存
s - 包含子进程
l - 多线程,克隆线程
*+ - 位于后台的进程组 *
2,根据包名(pkg_name)查看该进程的信息(在Linux中用grep,下面的例子是在windows下,所以用的是findstr);
3, 查看newspage(21650)下的线程信息(暂时用他做什么分析):
4,-x参数:
5,-P 显示调度策略(这个比较有用)
在列属性中增加了一个重要的参数PCY(进程调度等级)
Android进程调度状态:
1).foreground process
2).visible process
3).Service process4
).background process
5).empty process
6,-p 显示进程的优先级和nice等级
第一个是在桌面操作的;第二个是进入newspage的主页面后操作的;
PRIO(priority) 进程优化级 20
NICE Nice值 0
RTPRI 实时进程优先级 0
SCHED 调度策略 SCHED_OTHER(默认策略)
参考:https://blog.csdn.net/caonima0001112/article/details/50379738
nice与进程调度:
Linux中,使用nice value(以下成为nice值)来设定一个进程的优先级,系统任务调度器根据nice值合理安排调度。
1),nice的取值范围为-20到19。
2),通常情况下,nice的默认值为0。视具体操作系统而定。
3),nice的值越大,进程的优先级就越低,获得CPU调用的机会越少,nice值越小,进程的优先级则越高,获得CPU调用的机会越多。
4),一个nice值为-20的进程优先级最高,nice值为19的进程优先级最低。
5),父进程fork出来的子进程nice值与父进程相同。父进程renice,子进程nice值不会随之改变。
Android中的nice:
由于Android基于Linux Kernel,在Android中也存在nice值。但是一般情况下我们无法控制,原因如下:
1),Android系统并不像其他Linux发行版那样便捷地使用nice命令操作。
2),renice需要root权限,一般应用无法实现。
线程调度:
虽然对于进程的优先级,我们无法控制,但是我们可以控制进程中的线程的优先级。在Android中有两种线程的优先级,一种为Android API版本,另一种是 Java 原生版本。Linux中,使用nice value(以下成为nice值)来设定一个进程的优先级,系统任务调度器根据nice值合理安排调度。
7,-c 显示进程耗费的CPU时间
==============================================================================================================
ps (process status):这个命令在adb 中是查看android系统的进程状态命令。
1.简单用法,在Windows命令行,输入adb shell ps
(1)各个字段名称及含义
USER | 进程当前所属的用户 | |
PID | 进程ID | |
PPID | 父进程ID | |
VSIZE | 进程的虚拟内存大小,以KB为单位 | |
RSS | 进程实际占用的内存大小,以KB为单位 | |
WCHAN | 进程正在睡眠的内核函数名称; | 该函数名称是从/root、system.map文件中读取的,0代表进程处于运行态;否则代表内核地址(休眠态) |
PC | 计算机中提供要从“存储器”中取出的下一个指令地址的寄存器 | |
NAME | 进程状态(注:状态说明见下)和名称 | 如上图中,NAME下的S代表进程状态。 |
(2)NAME中进程状态的不同值如下:
D | 不可中断的睡眠态 |
R | 运行态 |
S | 睡眠态 |
T | 被跟踪或已停止 |
Z | 僵尸态 |
W | 进入内存交换(从内核2.6开始无效) |
X | 死掉的进程 |
< | 高优先级 |
N | 低优先级 |
L | 有些页被锁进内存 |
s | 包含子进程 |
l | 多线程,克隆线程 |
+ | 位于后台的进程组 |
2.ps命令参数
ps -P -p -t -x -c [pid] [name]
-P | 显示调度策略,通常是bg或fg,当获取失败将会是un和er |
-p | 显示进程的优先级和nice等级 |
-t | 显示进程下的线程列表 |
-x | 显示进程耗费的用户时间和系统时间,格式(u:0, s:0),单位为:秒 |
-c | 显示进程耗费的CPU时间(低于4.0版本可能不兼容) |
[pid] | 过滤指定的进程PID |
[name] | 过滤指定的进程NAME |
(1)adb shell ps -P,图中圈出的是多出的PCY列,表示进程的调度等级。
备注:进程调度状态有
foreground process | 前台 |
background process | 后台 |
visible process | 可视化进程 |
Services process | 服务进程 |
empty process | 空进程 |
(2)adb shell ps -p
PRIO | 进程优先级 |
NICE | Nice值 |
RTPRI | 实时进程优先级 |
SCHED | 调度策略 |
(3)adb shell ps -t 结果中的行数比 adb shell ps 命令多,列数一样
(4)adb shell ps -x 显示耗用的用户及系统时间
(5)adb shell ps -c 显示耗用的CPU时间,多了一个CPU列
(6)多个参数使用 adb shell ps -c -x 1 (注:1代表PID)
备注:虽然,android的内核是Linux,和Linux的ps不同,Linux的ps 命令中参数可以这样-aux,但是adb 中 ps的参数,不可以。需要用上图的方式使用。
====================================================================================================================
- 打印设备/模拟器上的所有软件包: adb shell pm list packages
- 查看当前和用户交互的activity: adb shell dumpsys activity | grep 'mFoc'
- 查找当前栈中的所有activity: adb shell dumpsys activity activities | grep [package_name]
- 启动app入口程序: adb shell am start -W [package_name]/[LauncherActivity]
- 查看trace文件: /sdcard/Android/data/[package_name]/files/dmtrace.trace
- 查看jar目录结构:jar tf test.jar
- 杀死进程
方法1:强制停止APP进程,不会清除APP进程在系统中产生的数据
adb shell am force-stop package:执行该命令后没有输出,手机对应进程已被杀死。
方法2:停止APP进程,并且清除这个APP进程产生的所有数据,相当于reset
adb shell pm clear package
执行该命令后输出success即表示命令执行成功,app进程被杀死,且会清楚所有数据,相当于卸载重装的效果,一般不建议使用。
14.生成dex文件:dx --dex --output=target.dex test.jar
15.jar cvf dynamic.jar com/*(前面是包名目录)
16.查看电池状态: adb shell dumpsys battery
17.将USB充电停止: adb shell dumpsys battery unplug
18.将手机IDLE状态许可:adb shell dumpsys deviceidle enable
19.强制进入IDLE状态: adb shell dumpsys deviceidle force-idle
20.如下命令设备走出IDLE状态:adb shell dumpsys deviceidle disable