¿Cómo manejar el código cuando la aplicación se destruye deslizando en Android?

Si mi aplicación se está ejecutando y presiono el botón de inicio, la aplicación se pone en segundo plano. Ahora si al presionar el botón de inicio y matar la aplicación al deslizarlo desde la lista de aplicaciones recientes, no se llama a ninguno de los eventos como onPause() , onStop() o onDestroy() sino que el proceso finaliza. Entonces, si quiero que mis servicios se detengan, elimine las notificaciones y anule el registro de los oyentes, ¿cómo puedo hacer eso? Leí bastantes artículos y blogs, pero no obtuve ninguna información útil y no encontré documentación al respecto. Cualquier ayuda sería apreciada. Gracias por adelantado.

Acabo de resolver un tipo similar de problema.

Esto es lo que puede hacer si solo se trata de detener el servicio cuando se elimina la aplicación al deslizar desde la lista de aplicaciones Recientes.

Dentro de su archivo Manifiesto, mantenga stopWithTask como true para el Servicio. Me gusta:

  

Pero como dices que quieres anular el registro de oyentes y detener la notificación, etc., sugeriría este enfoque:

  1. Dentro de su archivo Manifiesto, mantenga la stopWithTask como false para el Servicio. Me gusta:

      
  2. Ahora, en su servicio MyService , anule el método onTaskRemoved . (Esto se disparará solo si stopWithTask está configurado en false ).

     public void onTaskRemoved(Intent rootIntent) { //unregister listeners //do any other cleanup if required //stop service stopSelf(); } 

Consulte mi pregunta para obtener más detalles, que también contiene otra parte del código.

Espero que esto ayude.

Encontré una forma de hacer esto

hacer un servicio como este

 public class OnClearFromRecentService extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("ClearFromRecentService", "Service Started"); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); Log.d("ClearFromRecentService", "Service Destroyed"); } @Override public void onTaskRemoved(Intent rootIntent) { Log.e("ClearFromRecentService", "END"); //Code here stopSelf(); } 

}

2) registrar este servicio en manifest.xml

  

3) A continuación, inicie este servicio en su actividad de salpicadura

 startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); 

Y ahora cuando borre su aplicación de Android reciente, entonces se ejecutará este método enTaskRemoved ().

Resolví un problema similar. Si desea después de deslizar desde la tarea reciente y en el siguiente inicio para que se comporte correctamente, siga los pasos a continuación:

1) Guardar ID de proceso en preferencia compartida:

SharedPreferencesUtils.getInstance().putInt(SharedPreferencesUtils.APP_PROCESS_ID, android.os.Process.myPid());

2) Cuando la aplicación se inicia desde el iniciador después de borrar de una tarea reciente, hazlo:

 int previousProcessID = mSharedPreferencesUtils.getInt(SharedPreferencesUtils.APP_PROCESS_ID); int currentProcessID = android.os.Process.myPid(); if ((previousProcessID == currentProcessID)) { // This ensures application not killed yet either by clearing recent or anyway } else { // This ensures application killed either by clearing recent or by anyother means } 

Cuando presionas home – onPause y onStop de tu Activity se llama, entonces en este momento tienes que hacer todos los ahorros y la limpieza, porque la plataforma Android no garantiza que onDestroy o cualquier otro método de ciclo de vida sea invocado, entonces el proceso podría ser asesinado sin ninguna notificación.

onPause() guardar sus datos cuando se llama onPause() . Mira este diagtwig del ciclo de vida: Desarrollador de Android

Puede ver que una aplicación puede ser eliminada después de onPause() o onStop() .

Maneje sus datos allí y recupérelos en onRestart() \ onCreate() .

¡buena suerte!

No puede manejar el deslizamiento, porque el sistema simplemente elimina su proceso de la memoria sin llamar a ninguna callback.

He comprobado que antes de que el usuario llame a la pantalla de “aplicaciones recientes”, siempre se llamará a OnPause (). Por lo tanto, debe guardar todos los datos en el método onPause sin verificar isFinishing ().

Para comprobar el botón Atrás, use el método OnBackPressed.