am常用命令
拨打电话10086
1 | |
打开网址
1 | |
启动Activity
启动包名为com.yuanhh.app,主Activity为.MainActivity 且extra数据以”website”为key, “yuanh.com”为value
1 | |
发送广播
1 | |
命令列表:
| 命令 | 功能 | 实现方法 |
|---|---|---|
| am start [options] |
启动Activity | startActivityAsUser |
| am startservice |
启动Service | startService |
| am stopservice |
停止Service | stopService |
| am broadcast |
发送广播 | broadcastIntent |
| am kill |
杀指定后台进程 | killBackgroundProcesses |
| am kill-all | 杀所有后台进程 | killAllBackgroundProcesses |
| am force-stop |
强杀进程 | forceStopPackage |
| am hang | 系统卡住 | hang |
| am restart | 重启 | restart |
| am bug-report | 创建bugreport | requestBugReport |
| am dumpheap |
进程pid的堆信息输出到file | dumpheap |
| am send-trim-memory |
收紧进程的内存 | setProcessMemoryTrimLevel |
| am monitor | 监控 | MyActivityController.run |
am命令实的实现方式在Am.java,最终几乎都是调用ActivityManagerService相应的方法来完成的,am monitor除外。比如前面概述中介绍的命令am start -a android.intent.action.VIEW -d http://gityuan.com, 启动Acitivty最终调用的是ActivityManagerService类的startActivityAsUser()方法来完成的。再比如am kill-all命令,最终的实现工作是由ActivityManagerService的killBackgroundProcesses()方法完成的
Options
主要是启动Activity命令am start [options] 使用options参数,接下来列举Activity命令的[options]参数:
1 | |
启动Activity的实现原理: 存在-W参数则调用startActivityAndWait()方法来运行,否则startActivityAsUser()。
收紧内存
1 | |
例如: 向pid=12345的进程,发出level=RUNNING_LOW的收紧内存命令
1 | |
那么level取值范围为: HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE。
其他
对于am的子命令,startservice, stopservice, broadcast, kill, profile start, profile stop, dumpheap的可选参数都允许设置--user 。目前市面上的绝大多数手机还是单用户模式,故可以忽略该参数,默认为当前用户。
例如:启动id=10010的用户的指定service。
1 | |
Intent
Intent的参数和flags较多,分为3种类型参数,常用参数,Extra参数,Flags参数
常用参数
-a: 指定Intent action, 实现原理Intent.setAction();-n: 指定组件名,格式为{包名}/.{主Activity名},实现原理Intent.setComponent();-d: 指定Intent data URI-t: 指定Intent MIME Type-
-c <CATEGORY> [-c <CATEGORY>] ...]::指定Intent category,实现原理Intent.addCategory() -p: 指定包名,实现原理Intent.setPackage();-f: 添加flags,实现原理Intent.setFlags(int ),紧接着的参数必须是int型;
实例
1 | |
Extra参数
基本类型
| 参数 | -e/-es | -esn | -ez | -ei | -el | -ef | -eu | -ecn |
|---|---|---|---|---|---|---|---|---|
| 类型 | String | (String)null | boolean | int | long | float | uri | component |
比如参数es是Extra String首字母简称,实例:
1 | |
此处-es website gityuan.com,等价于Intent.putExtra(“website”, “gityuan.com”);
数组类型
| 参数 | -esa | -eia | -ela | -efa |
|---|---|---|---|---|
| 数组类型 | String[] | int[] | long[] | float[] |
比如参数eia,是Extra int array首字母简称,多个value值之间以逗号隔开.。
实例:
1 | |
此处-ela weekday 1,2,3,4,5,等价于Intent.putExtra(“weekday”, new int[]{1,2,3,4,5});
ArrayList类型
| 参数 | -esal | -eial | -elal | -efal |
|---|---|---|---|---|
| List类型 | String | int | long | float |
比如参数efal,是Extra float Array List首字母简称,多个value值之间以逗号隔开。
实例:
1 | |
此处-efal nums 1.2,2.2,等价于先构造ArrayList变量,再通过putExtra放入第二个参数。
Flags参数
在参数类型1中,提到有-f ,是通过Intent.setFlags(int )方法,来设置Intent的flags.本小节也是关于flags,是通过Intent.addFlags(int )方法。如下所示,所有的flags参数。
1 | |
例如,发送action=”broadcast.demo”的广播,并且对于forceStopPackage()的应用不允许接收该广播,命令如下:
1 | |
参考文章
1 | |