Android Process.killProcess(pid)是否只会杀死进程或整个应用程序?

时间:2016-11-10 10:06:57

标签: android

在Android中,我可以使用 Process.killProcess(pid)来终止我的进程。

但是如果我在Manifest中使用 android:process =“com.some.name”定义了我的应用程序中的多个主要进程,它会杀死所有这些进程,还是只杀死所有进程打电话了?

2 个答案:

答案 0 :(得分:1)

如果您真的需要杀死所有应用程序进程,这可能会有所帮助。

public static void killAppProcesses(Context context) {
    Log.i(TAG, "killAppProcesses; ");

    int myPid = Process.myPid();
    ActivityManager activityManager = (ActivityManager)
            context.getSystemService(Context.ACTIVITY_SERVICE);
    if (activityManager != null) {
        List<ActivityManager.RunningAppProcessInfo> processInfos =
                activityManager.getRunningAppProcesses();
        if (processInfos != null) {
            String packageName = context.getPackageName();
            for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
                if (processInfo.pid != myPid) { // Current process will be killed last
                    if (processInfo.pkgList != null) {
                        List<String> packageNames = Arrays.asList(processInfo.pkgList);
                        if (packageNames.contains(packageName)) {
                            Log.i(TAG, "killAppProcesses; killing process: " + processInfo.pid);
                            Process.killProcess(processInfo.pid);
                        }
                    }
                }
            }
        }
    }

    Log.i(TAG, "killAppProcesses; killing my process: " + myPid);
    Process.killProcess(myPid);
}

答案 1 :(得分:0)

来自docs Process.killProcess(pid)

  

使用给定的PID终止进程。请注意,尽管此API允许   我们要求基于其PID来杀死任何进程,内核会   仍然对您实际能够使用的PID施加标准限制   要杀了通常,这意味着只有运行调用者的进程   包/应用程序以及该应用程序创建的任何其他进程;   共享一个普通UID的软件包也可以互相杀死   过程

如果您杀死主要进程,其他人将成为Orphan process