2010-09-04 113 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]); 
        } 
       } 
      } 
    }