Android proceso asesino

Tal vez usted puede ayudar.

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

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

¿Podría escribir sólo algunos métodos Java que puedo llamar para obtener la lista de proceso, y el método para matarlos. O simplemente dame algunos consejos.

3 Solutions collect form web for “Android proceso asesino”

Matar aplicaciones / servicios en Android es generalmente una mala idea . Si bien es posible escribir aplicaciones de task killer , no debe ser alentado para cualquier cosa fuera de los propósitos de desarrollo / depuración.

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

Estas herramientas de gestión de tareas suelen romper las aplicaciones, ya que a menudo no se recuperan de la terminación forzada, sobre todo si estaban ocupadas escribiendo en un archivo o utilizando otro recurso cuando fueron eliminadas. También pone a los usuarios del teléfono en una falsa expectativa de que las aplicaciones que figuran en realidad están funcionando en su teléfono, que a menudo no lo son. Esto se explica en [Documentos de ActivityManager] [1]:

Información que puede recuperar sobre una tarea en particular que se está ejecutando actualmente en el sistema. Tenga en cuenta que una tarea en ejecución no significa que la tarea real tiene un proceso en el que se está ejecutando activamente; simplemente significa que el usuario ha ido a él y nunca lo cerró, pero actualmente el sistema puede haber matado su proceso y sólo se mantiene en su último estado con el fin de reiniciarlo cuando el usuario vuelve.

Cuando vea la lista de aplicaciones en running en aplicaciones como TaskKiller o Quick System Info, muchas de ellas no se están ejecutando, están en estado suspendido. Estas aplicaciones no consumen recursos del sistema porque Android ha decidido detenerlas hasta que se necesiten de nuevo. Sin embargo, cuando los mates, no les da tiempo para cerrarlos de forma limpia, y cuando intenta lanzarlos la próxima vez, se les puede presentar un diálogo de cierre de la fuerza poco amistoso. He visto que las aplicaciones se rompen por completo, incluso con una reinstalación ineficaz, porque están intentando leer un archivo dañado en la tarjeta SD o utilizan llamadas no oficiales a la API.

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

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

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

  // Get currently running application processes List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses(); if(list != null){ for(int i=0;i<list.size();++i){ if("com.android.email".matches(list.get(i).processName)){ int pid = android.os.Process.getUidForName("com.android.email"); android.os.Process.killProcess(pid); }else{ mTextVIew.append(list.get(i).processName + "\n"); } } } /* // Get currently running service List<ActivityManager.RunningServiceInfo> list = servMng.getRunningServices(1024); if(list != null){ for(int i=0;i<list.size();++i){ mTextVIew.append(list.get(i).service.getClassName() + "\n"); } } */ /* // Get currently running tasks List<ActivityManager.RunningTaskInfo> list = servMng.getRunningTasks(1024); if(list != null){ for(int i=0;i<list.size();++i){ mTextVIew.append(list.get(i).toString() + "\n"); } } */ 

Salir de una aplicación de Android a través de Java es difícil de decir lo menos. Matar la aplicación a través de la interfaz de objeto de proceso es generalmente considerada mala forma por todas las razones enumeradas anteriormente, no voy a repetir, pero no creo que los desalientos publicados están destinados a detener de hacerlo todo juntos, sólo te hacen consciente de posibles advertencias. Aquí está la captura, Android tiene que realizar un seguimiento de Actividades y load/run order porque los dispositivos tienen un botón de back … por lo que obedientemente llamar finish() o finishFromChild(childActivity) y cuando el usuario exits la aplicación, hay una actividad anterior desde su aplicación, felizmente ignorando su código que le pidió salir.

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

Además, siempre pregunto al usuario antes de salir, una convención de interfaz de usuario de aplicaciones de escritorio que se traduce bien aquí.

El código anterior pierde la marca llamando a "getUidForName" …

Este ejemplo captura el evento del back button Nativo de Android del back button del hardware y le pregunta al usuario "¿de verdad quieres 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); } } 
  • Cuando su BroadcastReceiver se invoca a través de un Intent, ¿en qué proceso se ejecuta?
  • ¿Los fragmentos con setRetainInstance (true) sobreviven al cierre del proceso?
  • La aplicación de Android no se cierra después de llamar a System.exit (0)
  • Cómo forzar a detener una aplicación de Android
  • ¿Cuáles son los pros y los contras de usar múltiples procesos dentro de la aplicación Android
  • Obtención de una lista de procesos en ejecución y eliminación de un proceso específico
  • Cómo leer la salida del comando de proceso android
  • ¿Las aplicaciones que utilizan varios procesos comparten una instancia de Dalvik?
  • El nombre de aplicación de PackageManager siempre es nulo
  • ¿Cómo puedo abrir un Fragmento de Android en un nuevo proceso?
  • Exploración de subred de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.