Android结束APP进程以及判断进程是否存在、判断Activity是否在后台
1 androidstudio 的 stop app 是结束 app 下次启动 会从头启动
2 通过 DDMS 结束进程
tools->android device monitor
等十几秒,弹出新对话框,然后左上角可以看到进程名 点击stop即可
模仿的 是
系统杀死进程
3 而 android开发者选项中的 不保持活动选项 则是每个界面都不保存
当activity被强杀时,系统会调用onSaveInstance去让你保存一些变量
判断进程是否存在
public class IsAppProcessExist {
/**
* 判断进程是否存活
*/
public static boolean isProcessExist(Context context, int pid) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> lists ;
if (am != null) {
lists = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcess : lists) {
if (appProcess.pid == pid) {
Log.e("TAG","333333");
return true;
}
}
}
return false;
}
}
调用:
IsAppProcessExist.isProcessExist(context,android.os.Process.myPid());
但是注意的是,不能用于判断自身是否被杀死然后执行相关操作 因为 你能去执行这个代码 说明你的进程就没有被杀死
结束APP进程:
一般用户直接通过菜单键杀掉应用,所以可以结束掉
而要自己点击返回键退出或其他逻辑直接结束干净APP:
1 finish掉 其他资源要释放干净(子进程、线程都要清干净) 还是不一定能完全退出
2 android.os.Process.killProcess(android.os.Process.myPid())
3 执行 shell命令 am force-stop
4 System.exit(0) 退出虚拟机
注意:app被杀死后, 变量 包括static的变量 以及application的实例 都会结束
并且 会回到上一个 结束的界面 并重新 oncreate 若继承了 baseActivity 则 baseActivity也会oncreate
而不是重新启动APP走重启流程
判断Activity是否在后台
参考项目的ActivityStack 用一个弱引用的Stack存着Started过的Activity即sStartedActivities,通过sAppBackGround标志位判断
在onActivityStarted会add进去 在onActivityStopped会remove出去
若if (!sAppBackGround && sStartedActivities.isEmpty()) 则sAppBackGround=true