2010-09-04 122 views
4

我正在使用eclipse。我试图在我的应用程序中杀死一个进程。然而,在eclipse中它似乎并不知道ActivityManager提供的killBackgroundProcess提示,它不会让我继续。我读到,您必须拥有杀掉后台进程的权限,并且已经从清单中添加了它无法识别的权限。下面是我想使用的代码:Android ActivityManager killBackgroundProcess不能正常工作

ActivityManager activityManager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); 
activityManager.killBackgroundProcess(myProcessId); 
+3

方法签名是“public void killBackgroundProcesses(String packageName)”。不是“public void killBackgroundProcess(int processID)”。 – gtiwari333 2011-10-14 12:05:37

回答

3

确保你的目标API级别8,因为这方法是在Android 2.2的只增加。

+0

有没有更好的方法来做到这一点呢?我应该使用流程类吗? – ngreenwood6 2010-09-04 20:26:07

+0

@ ngreenwood6:普通的Android SDK应用程序不应该在查杀进程。 – CommonsWare 2010-09-04 21:30:32

0

参数是包名不是processId。尝试通过它像这样:

myActivity.getApplication().getPackageName() 

作为论点。

2

方法签名为

public void killBackgroundProcesses (String packageName)

public void killBackgroundProcess (int processID)

以下工作CODE:

public static void killThisPackageIfRunning(final Context context, String packageName){ 
    ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
    activityManager.killBackgroundProcesses(packageName); 
} 

但这仅适用于> = API等级8因为这个方法是Android 2.2下载。

0

确保您的调用killBackgroundProcesses具有最顶级的Activity。

0

你可以在下面试试这些代码,它适用于我。

public static void clearMemory(Context context) { 
     ActivityManager activityManger = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<ActivityManager.RunningAppProcessInfo> list = activityManger.getRunningAppProcesses(); 
     if (list != null) 
      for (int i = 0; i < list.size(); i++) { 
       ActivityManager.RunningAppProcessInfo apinfo = list.get(i); 

       String[] pkgList = apinfo.pkgList; 

       if (apinfo.importance > ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE) { 
        for (int j = 0; j < pkgList.length; j++) { 
         activityManger.killBackgroundProcesses(pkgList[j]); 
        } 
       } 
      } 
    }