2012-03-23 67 views
5

我執行下面的代碼:獲取正在運行的進程的列表,並殺死特定的進程

ActivityManager actvityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
List<RunningTaskInfo> procInfos = actvityManager.getRunningTasks(1000); 

然後,我殺了一個過程中,我很感興趣,與

actvityManager.killBackgroundProcesses(process.baseActivity.getPackageName()); 

其中process是來自procInfos的條目。

問題是如果我再次運行getRunningTasks - 它仍然會顯示進程I(大概)已被殺死,而Android的任務管理器在調用killBackgroundProcesses之前列出了該進程,並在該調用之後從列表中將其刪除。

那麼,關於如何讓任務管理器獲得正在運行的進程列表的任何想法? 這是正常的,我已經成功地殺死了一個無根設備上的第三方進程?

+1

這將是一個更好的新問題,因爲它與你最初的要求有很大不同。無論如何,你可以在這裏找到你當前問題的大部分答案:http://stackoverflow.com/questions/8814696/how-to-kill-currently-running-task-in-android,特別是第二個答案。 – 2012-03-23 14:47:50

+0

@RobPridham:非常感謝,我沒有看到這個問題。我的改寫問題似乎沒有太大的不同,從原來的我... – 2012-03-23 14:50:30

回答

5

「正在運行」並不意味着用戶啓動了它;它可能正在偵聽事件,執行預定的後臺同步或其他任何事情。

ActivityManager.getRunningTasks()可能更接近你想要的,但實質上你總是會遇到這個問題,因爲用戶並不完全控制當前活動的內容。

+0

有道理,但我仍然不知道爲什麼畫廊顯示爲「運行」,因爲我重新啓動設備,肯定沒有啓動畫廊在所有。 – 2012-03-23 13:32:13

+0

可能有許多原因 - 只是一個例子,應用程序可以訂閱系統引導事件,接收它會導致它啓動,因此它將被視爲運行,直到系統決定終止它。 – 2012-03-23 13:41:56

+0

非常感謝。 'getRunningTasks()'真的好像做我需要的。最後一個問題:你是否偶然知道如何獲得由'getRunningTasks'返回的任務的相應進程名稱('ActivityManager.RunningTaskInfo')? – 2012-03-23 13:52:18