【问题标题】:How does Advanced Task Killer actually kill a process?Advanced Task Killer 如何真正杀死一个进程?
【发布时间】:2012-06-14 06:31:23
【问题描述】:

上面的问题基本上解释了我的问题。 Advanced Task Killer 如何杀死应用程序?

我已经尝试过this问题秒回答中提到的方法。哪个使用ActivityManager.killBackgroundProcesses.

for(RunningAppProcessInfo runningProcess : runningProcesses){
                    for(ApplicationInfo nonCompliantApp : nonCompliantApps){
                        if(runningProcess.pkgList != null) for(String runningAppPackageName : runningProcess.pkgList){
    //                      if(runningProcess.processName.startsWith("gameapps.avatar.")){
    ////                            FileManager.writeToLogFile(SystemApplicationManager.class, "run", LogMessageType.DEBUG, "Game Apps: " + runningProcess.processName + "  pkg: " + runningProcess.pkgList.length + " - " + runningProcess.pkgList[0]);
    //                      }

                            if(runningAppPackageName.equals(nonCompliantApp.packageName)){
                                ActivityManager amgr = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
                                ShellCommandManager.executeShellCommand("kill " + runningProcess.pid);
                            amgr.killBackgroundProcesses(nonCompliantApp.packageName);
                                FileManager.writeToLogFile(SystemApplicationManager.class, "run", LogMessageType.DEBUG, "Process found and killed: " + nonCompliantApp.packageName);
                            }

                            if(!keepRunning)break;
                        }
                    }

问题是,在执行完上面的代码后,我在 settings -> apps -> running 下查看,却发现同一个应用程序还在运行。我正在测试的设备是运行 Android ICS 的 HTC One X。

我做错了什么?一些帮助或澄清将不胜感激。

【问题讨论】:

标签: android kill-process


【解决方案1】:

它获取正在运行的应用程序并使用其进程 ID 来终止正在运行的进程。 一小段代码可能会对您有所帮助。

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

【讨论】:

  • 谢谢。但是,执行上述操作只会杀死我自己的进程,对吗?我的意思是,您传递给 Process.killProcess 方法的 pid 是被杀死的进程的 id 对吗?
  • 在那里输入 PID 不起作用。它只允许您杀死属于您的进程包的进程或由您的进程启动的其他进程。内核阻止您进行 AFAIK。无论如何,我之前尝试过这种方法,但没有奏效。
【解决方案2】:

试试这个:

private static void killProcess(String process_name)
{
     ActivityManager  manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
     List<ActivityManager.RunningAppProcessInfo> listOfProcesses = manager.getRunningAppProcesses();

     for (ActivityManager.RunningAppProcessInfo process : listOfProcesses)
     {
         if (process.processName.equals(process_name))
         {

                 manager.restartPackage(process.pkgList[0]);
                 Log.e(TAG, "Killed process [" + process.pkgList[0] + "]"); 

         }
     }
}

【讨论】:

  • 请解释这是如何回答问题的
  • 如果第一个代码没有杀死一个进程,那么这个可能是正确的。我不知道 Advanced Task Killer 是如何杀死进程的,是吗?我没有写那个应用程序。无论如何,如果此代码有效,则可能是该问题的答案。但我认为没有人能给出正确的答案,除非他来自高级任务杀手的团队。你不同意吗?
猜你喜欢
  • 2010-09-08
  • 1970-01-01
  • 2016-06-17
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 2015-03-12
相关资源
最近更新 更多