Android结束APP进程以及判断进程是否存在、判断Activity是否在后台

  • Post author:
  • Post category:其他




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



版权声明:本文为weixin_37577039原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。