2012-03-23 4 views
5

estoy ejecutando el siguiente fragmento de código:Obtener una lista de procesos en ejecución y matando a un proceso específico

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

Entonces, mato a un proceso que estoy interesado con

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

donde process es una entrada de procInfos.

El problema es que si ejecuto getRunningTasks nuevamente, aún mostraría el proceso I (presumiblemente) eliminado, mientras que un administrador de tareas para Android enumeró ese proceso antes de llamar al killBackgroundProcesses y lo eliminó de la lista después de esa llamada.

¿Alguna idea de cómo obtiene el administrador de tareas su lista de procesos en ejecución? ¿Y es normal que haya matado con éxito el proceso de terceros en un dispositivo sin raíz?

+1

Esto hubiera sido mejor como una nueva pregunta, ya que es bastante diferente de lo que originalmente se preguntó. En cualquier caso, puede encontrar la mayor parte de la respuesta a su pregunta actual aquí: http://stackoverflow.com/questions/8814696/how-to-kill-currently-running-task-in-android, en particular, la segunda respuesta . –

+0

@RobPridham: muchas gracias, no vi esa pregunta. Y mi pregunta reformulada no parece muy diferente de la original para mí ... –

Respuesta

5

'Running' no significa que un usuario lo haya iniciado; podría estar escuchando eventos, realizando una sincronización de fondo programada o cualquier otra cosa.

ActivityManager.getRunningTasks() puede estar más cerca de lo que desea, pero en esencia siempre tendrá este problema, porque el usuario no tiene el control total sobre lo que está activo actualmente.

+0

Tiene sentido, pero todavía no tengo idea de por qué la Galería aparece como "en ejecución" porque reinicié el dispositivo y seguramente no comencé la Galería en absoluto. –

+0

Podría haber varias razones: como solo un ejemplo, una aplicación puede suscribirse al evento de inicio del sistema y recibirla hará que se inicie, con lo que contará como ejecutada hasta que el sistema decida eliminarla. –

+0

Muchas gracias. 'getRunningTasks()' realmente parece hacer lo que necesito. Una última pregunta: ¿sabes, por casualidad, cómo obtener un nombre de proceso correspondiente para una tarea ('ActivityManager.RunningTaskInfo') devuelta por' getRunningTasks'? –

Cuestiones relacionadas