2012-03-23 11 views
5

Jestem wykonywania następujący fragment kodu:Getting listę uruchomionych procesów i zabijania procesu specyficznego

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

Potem zabić jeden proces Jestem zainteresowany z

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

gdzie process to wpis z procInfos.

Problem polega na tym, że ponownie uruchomię getRunningTasks - nadal będzie pokazywać proces, który został (prawdopodobnie) zabity, podczas gdy menedżer zadań dla Androida wymienił ten proces przed wywołaniem killBackgroundProcesses i usunął go z listy po tym wywołaniu.

Jakie są więc pomysły na to, w jaki sposób menedżer zadań otrzymuje listę uruchomionych procesów? Czy to normalne, że udało mi się zabić proces innej firmy na nierozwiązanym urządzeniu?

+1

Byłoby to lepsze jako nowe pytanie, ponieważ różni się ono od pierwotnie zadawanego pytania. W każdym razie możesz znaleźć większość odpowiedzi na swoje obecne pytanie tutaj: http://stackoverflow.com/questions/8814696/how-to-kill-currently-running-task-in-android, w szczególności druga odpowiedź . –

+0

@RobPridham: dziękuję bardzo, nie widziałem tego pytania. I moje przeformułowane pytanie nie wydaje się zbytnio różnić od oryginału ... –

Odpowiedz

5

"Uruchomienie" nie oznacza, że ​​użytkownik go uruchomił; może to być słuchanie zdarzeń, zaplanowana synchronizacja w tle lub cokolwiek innego.

ActivityManager.getRunningTasks() może być bliżej tego, co chcesz, ale w istocie zawsze będziesz mieć ten problem, ponieważ użytkownik nie ma pełnej kontroli nad tym, co jest aktualnie aktywne.

+0

Ma sens, ale wciąż nie mam pojęcia, dlaczego Galeria wyświetla się jako "działa", ponieważ zrestartowałem urządzenie i na pewno nie uruchomiłem galerii w ogóle. –

+0

Może być dowolna liczba powodów - jako jeden przykład, aplikacja może zasubskrybować zdarzenie rozruchu systemu, a odebranie jej spowoduje uruchomienie, po czym zostanie potraktowane jako działające, dopóki system nie zdecyduje się go zabić. –

+0

Wielkie dzięki. 'getRunningTasks()' wydaje się naprawdę robić to, czego potrzebuję. Ostatnie pytanie: czy przez przypadek wiesz, jak uzyskać odpowiednią nazwę procesu dla zadania ('ActivityManager.RunningTaskInfo') zwróconego przez' getRunningTasks'? –

Powiązane problemy