在終端利用am命令啟動一個activity:
命令格式:am start -n 包名/全類名
am start -n com.example.huozhenpeng.amdemo/com.example.huozhenpeng.amdemo.SecondActivity
am命令所在路徑(其實就是一個java文件):
路徑:
在終端輸入am命令的時候其實運行的就是這個am腳本
Am.java
public static void main(String[] args) {
(new Am()).run(args);
}
調(diào)用run方法并傳入?yún)?shù)
public void run(String[] args) {
if (args.length < 1) {
onShowUsage(System.out);
return;
}
mArgs = args;
mNextArg = 0;
mCurArgData = null;
try {
onRun();
} catch (IllegalArgumentException e) {
onShowUsage(System.err);
System.err.println();
System.err.println("Error: " + e.getMessage());
} catch (Exception e) {
e.printStackTrace(System.err);
System.exit(1);
}
}
如果參數(shù)小于1調(diào)用onShowUsage()方法,否則調(diào)用onRun()方法
如果直接在終端輸入am命令提示的信息就是在這里打印到控制臺的
如果參數(shù)多于一個
@Override
public void onRun() throws Exception {
mAm = ActivityManagerNative.getDefault();
if (mAm == null) {
System.err.println(NO_SYSTEM_ERROR_CODE);
throw new AndroidException("Can't connect to activity manager; is the system running?");
}
String op = nextArgRequired();
if (op.equals("start")) {
runStart();
} else if (op.equals("startservice")) {
runStartService();
} else if (op.equals("stopservice")) {
runStopService();
} else if (op.equals("force-stop")) {
}
}
這里判斷第二個參數(shù),我們傳入的是start肛根,所以接著執(zhí)行runStart()方法
這里就是啟動Activity的代碼以及一些健壯性判斷今膊。