Asesino de Android

Quizás puedas ayudar.

¿Es posible obtener una lista de todos los Processes que se ejecutan en el sistema Android y matar algunos de ellos? Sé que hay algunas aplicaciones ( task managers ), pero me gustaría escribir mi propia y sencilla aplicación.

Me gustaría escribir el administrador de tareas simple, solo la lista de todos los procesos y el botón que matará algunos de ellos.

Podrías escribir algunos métodos Java a los que pueda llamar para obtener una lista del proceso y un método para matarlos. O solo dame algunos consejos.

En general, matar aplicaciones / servicios en Android es una muy mala idea . Si bien es posible escribir aplicaciones task killer , no se debe alentar para nada fuera de los propósitos de desarrollo / depuración.

La gestión de tareas es responsabilidad de las O / S de Android, las tareas que puede ver no son procesos (en el sentido de los procesos que ve en el administrador de tareas de Windows, por ejemplo), de hecho, solo tienen un proceso cuando Android les dice ellos pueden tener uno.

Las aplicaciones se rompen regularmente con estas herramientas de administración de tareas, ya que a menudo no se recuperan de la finalización forzada, especialmente si estaban ocupadas escribiendo en un archivo o usando otro recurso cuando fueron asesinados. También pone a los usuarios del teléfono en una falsa expectativa de que las aplicaciones enumeradas en realidad están EN EJECUCIÓN en sus teléfonos, que a menudo no son. Esto se explica en [Documentos de ActivityManager] [1]:

Información que puede recuperar sobre una tarea particular que actualmente se está “ejecutando” en el sistema. Tenga en cuenta que una tarea en ejecución no significa que la tarea actual tenga un proceso en el que se está ejecutando activamente; simplemente significa que el usuario ha ido a él y nunca lo ha cerrado, pero actualmente el sistema puede haber matado a su proceso y solo se está aferrando a su último estado para reiniciarlo cuando el usuario regrese.

Cuando ve la lista de aplicaciones en running en aplicaciones como TaskKiller o Quick System Info, muchas de ellas no se están ejecutando, simplemente están suspendidas. Estas aplicaciones no consumen recursos del sistema porque Android ha decidido detenerlos hasta que se vuelvan a necesitar. Sin embargo, cuando los matas, no les das tiempo para cerrarlos limpiamente, y cuando trates de lanzarlos la próxima vez, se te puede presentar un cuadro de diálogo de cierre de fuerza antipático. He visto que las aplicaciones se rompen por completo, incluso con una reinstalación que no es efectiva, porque están tratando de leer un archivo dañado en la tarjeta SD, o usan llamadas API no oficiales.

En resumen, los amigos no permiten que los amigos usen asesinos de tareas en Android.

De todos modos, para responder a su pregunta, el ActivityManager es lo que la mayoría de estas aplicaciones usan para enumerar las actividades que están en ejecución / suspendidas.

freetaskmanager es un ejemplo de uno de estos task managers en uso.

  // Get currently running application processes List list = servMng.getRunningAppProcesses(); if(list != null){ for(int i=0;i list = servMng.getRunningServices(1024); if(list != null){ for(int i=0;i list = servMng.getRunningTasks(1024); if(list != null){ for(int i=0;i 

Salir de una aplicación de Android a través de Java es difícil, por decir lo menos. Matar la aplicación a través de la interfaz del objeto de proceso generalmente se considera de mala calidad por todos los motivos enumerados anteriormente, no voy a modificarlos, pero no creo que los desalientos publicados pretendan evitar que lo hagas todo junto, simplemente te hacen consciente de posibles advertencias. Aquí está la trampa, Android tiene que hacer un seguimiento de Actividades y load/run order porque los dispositivos tienen un botón back … por lo que debes llamar a finish() o finishFromChild(childActivity) y cuando el usuario exits la aplicación, hay una actividad previa desde su aplicación, felizmente ignorando el código que lo pidió salir.

A veces, solo tienes que matar la aplicación. Entonces … antes de cometer este proceso digital matar, tienes que hacer un poco de planificación. Asegúrese de que el usuario no mate ninguna E / S de archivo o comunicación de red vital para su aplicación. Mi estrategia para esto fue front load mis actividades para hacer todo el trabajo pesado en o cerca de los eventos de carga.

Además, siempre solicito al usuario antes de que salgan, una convención de interfaz de usuario de aplicación de escritorio que se traduce bien aquí.

El código anterior pierde la marca al llamar a “getUidForName” …

Este ejemplo captura el evento del back button Android Native back button de hardware y le indica al usuario “¿de verdad quiere dejar mi aplicación?” Y si el usuario selecciona “sí”, mata la aplicación.

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //Handle the back button if(keyCode == KeyEvent.KEYCODE_BACK) { //Ask the user if they want to quit new AlertDialog.Builder(this) .setIcon(android.R.drawable.exclamationpoint) .setTitle("Exit?") .setMessage("You are about to exit the Application. " + "Do you really want to exit?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Stop the activity //maintenancetabs.this.finish(); int pid = android.os.Process.myPid(); android.os.Process.killProcess(pid); } }) .setNegativeButton("No", null) .show(); return true; } else { return super.onKeyDown(keyCode, event); } }