1.在PC上通过adb 关闭/启动应用
1)通过adb连接设备 adb connect 192.168.1.XX , 当然也可以通过USB 直接连接;
2) 执行adb shell ps 查看当前正在运行的进程列表,可以获取进程的名字;
3)执行adb shell am force-stop 包名 即可强行关闭进程,eg: adb shell am force-stop com.xxx.xxx
执行adb shell am start -n 包名/启动类的名称 , eg: adb shell am start -n com.xxx.xxx/com.xxx.xxx.SplashActivity
2.在代码中:
try {
//关闭其他应用
Process exec = Runtime.getRuntime().exec("am force-stop 包名");
//打开其他应用
Process exec = Runtime.getRuntime().exec("am start -n 包名/启动类名称");
if (exec.waitFor() == 0) {
//执行成功
}
} catch (Exception e) {
e.printStackTrace();
}
其中,Runtime.getRuntime.exec() 时可能会阻塞UI线程, 所以建议是在子线程中执;
可以参考我的另一篇: 代码模拟物理按键 https://blog.csdn.net/lindroid/article/details/83062250
操作进程,需要权限
//允许程序启动其他应用程序
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
//允许程序调用killBackgroundProcesses(String).方法结束后台进程
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
//如果你使用adb connect
<uses-permission android:name="android.permission.INTERNET" />
如果想彻底退出当前进程
int pid = android.os.Process.myPid();
String command = "kill -9 "+ pid;
try {
Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
}
退出当前应用,并强行回到桌面
Intent startMain = new Intent(context, LoginActivity.class);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startMain.addCategory(Intent.ACTION_MAIN);
context.startActivity(startMain);
System.exit(0);