Comment gérer le code lorsque l’application est tuée en glissant dans Android?

Si mon application est en cours d’exécution et que j’appuie sur le bouton d’accueil, l’application passe en arrière-plan. Maintenant, si un long onPause() sur le bouton d’accueil et de tuer l’application en le faisant glisser depuis la liste des applications récentes, aucun des événements comme onPause() , onStop() ou onDestroy() appelé plutôt le processus est terminé. Donc, si je veux que mes services arrêtent, tuent les notifications et désinscrivent les écouteurs, comment puis-je le faire? J’ai lu pas mal d’articles et de blogs mais je n’ai pas eu d’informations utiles et je n’ai trouvé aucune documentation à ce sujet. Toute aide serait appréciée. Merci d’avance.

Je viens de résoudre un problème similaire.

Voici ce que vous pouvez faire s’il s’agit juste d’arrêter le service lorsque l’application est supprimée en glissant de la liste des applications récentes.

À l’intérieur de votre fichier Manifest, conservez l’indicateur stopWithTask comme true pour Service. Comme:

  

Mais comme vous dites que vous souhaitez désinscrire les auditeurs et arrêter la notification, etc., je suggère cette approche:

  1. Dans votre fichier manifeste, conservez l’indicateur stopWithTask sur false pour Service. Comme:

      
  2. Maintenant, dans votre service MyService , remplacez la méthode onTaskRemoved . (Cela ne sera déclenché que si stopWithTask est défini sur false ).

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

Référez- moi ma question pour plus de détails, qui contient également une autre partie du code.

J’espère que cela t’aides.

Trouvé un moyen de le faire

faire un service comme celui-ci

 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) enregistrer ce service dans manifest.xml

  

3) Puis lancez ce service sur votre activité splash

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

Et maintenant, chaque fois que vous effacez votre application depuis Android récent, cette méthode onTaskRemoved () s’exécute.

J’ai résolu un problème similaire. Si vous voulez après avoir glissé de la tâche récente et au prochain lancement, vous devez vous comporter correctement, puis suivez les étapes ci-dessous:

1) Enregistrer l’identifiant du processus dans la préférence partagée:

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

2) Lorsque l’application est lancée à partir du lanceur après la suppression de la tâche récente, procédez comme suit:

 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 } 

Lorsque vous appuyez sur home – onPause et on- onStop de votre activité sont appelés, vous devez donc faire toutes les économies et tous les nettoyages, car la plate-forme Android ne garantit pas que onDestroy ou toute autre méthode de cycle de vie serait invoquée. pourrait être tué sans notification.

Vous devez enregistrer vos données lorsque onPause() est appelée. Regardez ce diagramme de cycle de vie: Développeur Android

Vous pouvez voir qu’une application peut être tuée après onPause() ou onStop() .

Gérez vos données et récupérez-les dans onRestart() \ onCreate() .

bonne chance!

Vous ne pouvez pas gérer le balayage, car le système supprime simplement votre processus de la mémoire sans appeler aucun rappel.

J’ai vérifié que, avant que l’utilisateur appelle l’écran “applications récentes”, onPause () sera toujours appelé. Vous devez donc enregistrer toutes les données dans la méthode onPause sans vérifier isFinishing ().

Pour vérifier le bouton, utilisez la méthode onBackPressed.