Aplicación de Android vs. Proceso

He creado una aplicación para Android con una actividad y el nombre del paquete "com.explore"

  <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 

Ejecuto comando ps.

 USER PID PPID VSIZE RSS WCHAN PC NAME app_137 2974 91 478604 48524 ffffffff 00000000 S com.explore 

Presiono el botón Atrás. Salgo de la aplicación y vengo a la pantalla de inicio Ahora, una vez más, ejecute el comando ps.

 USER PID PPID VSIZE RSS WCHAN PC NAME app_137 2974 91 472428 42572 ffffffff 00000000 S com.explore 

El proceso 2974 todavía está en funcionamiento. ¿Puede alguien por favor explicarme el comportamiento? ¿Eso es uso de la memoria, estado o cuánto tiempo el proceso persistirá? ¿Debo eliminar el proceso de mi código después de presionar hacia atrás? ¿Cómo matar el proceso con gracia?

Cuando ejecuta una aplicación, si no se está ejecutando ya, obtiene un nuevo ID de proceso. Este ID permanece con él hasta que ya no está en la memoria, en absoluto. (Esto se puede lograr y probar usando la opción "Parada de Fuerza" en Configuración de la Aplicación.)

Sin embargo, cuando un usuario pulsa los botones de fondo o de inicio, la aplicación no sale y, en la mayoría de los casos, solo se detiene o se detiene.

Puede leer esta documentación , que detalla el ciclo de vida del proceso en detalle. Los puntos 1 y 2 básicamente dicen que un proceso de primer plano (o uno detrás de algo superficial, como un diálogo) no será terminado a menos que sea absolutamente necesario (fuerza cercana o sin memoria). El punto 3 es importante; dice que cualquier proceso que ya no es necesario – es decir, el usuario ha "cerrado" – puede o no puede ser matado, dependiendo de la memoria del dispositivo. Y, por último, el punto 4, cualquier cosa que no está haciendo nada, pero es sólo .. existente .. será asesinado tan pronto como sea posible.

También puede mirar el ciclo de vida de la Activity . Esto le mostrará con precisión cuándo se produce cada uno de los pasos de la aplicación (es decir, cuando se detiene, cuando se detiene y cuando se destruye). Lo único que realmente no cubre es la asignación excesiva de memoria (o cambios de orientación, que vuelven a disparar todo el ciclo de vida).

Para concluir, recuerde que Android es inteligente. Gestiona sus procesos mejor de lo que la mayoría de los desarrolladores haría, y trata de mantener el mayor número posible de procesos para una fácil reutilización. A menos que esté absolutamente seguro de que desea que su proceso de memoria, nunca debe matarlo. Y la forma en que tenemos que matar y gestionar los procesos nunca es bonita .

Empezar a leer los fundamentos . En resumen, en la mayoría de los casos no debería preocuparse por los procesos, Android se encarga de iniciar y detener automáticamente. El proceso de matar puede resultar en que el sistema lo reinicie, por lo que normalmente no hay mucho que ganar. Olvídate de los "asesinos de tareas" y utilidades similares que hoy en día son en su mayoría inútiles.

  • Lista de todos los procesos en ejecución en Android
  • ¿Cómo puedo ver qué wakelocks están activos?
  • ¿Cómo matar una aplicación de terceros?
  • Runtime.exec () error: se bloquea sin proporcionar un objeto de proceso
  • Android runtime.getruntime (). Exec () obtener id de proceso
  • La notificación sigue en la barra después de matar al servicio
  • GetRunningAppProcesses devuelve la lista vacía en Android M (5.1.1)
  • Obtención de una lista de procesos en ejecución y eliminación de un proceso específico
  • Java.lang.Thread.setPriority vs android.os.Process.setThreadPriority
  • ¿Cómo ejecutar una aplicación Qt en segundo plano en Android?
  • Cuando su BroadcastReceiver se invoca a través de un Intent, ¿en qué proceso se ejecuta?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.