Nous voyons les applications que nous n'avons pas fermées, comme ceci
Mais lorsque nous souhaitons fermer une application à partir de cet écran (sous l'image), la méthode onDestroy () n'est pas appelée, mais l'application est fermée. Je dois appeler onDestroy () lorsque l'application est fermée de cette façon. Comment puis-je faire ceci?
Comme spécifié dans la documentation Android, il n'est pas garanti que onDestroy()
sera appelé lors de la sortie de votre application.
"Il y a des situations où le système va simplement tuer le processus d'hébergement de l'activité sans appeler cette méthode"
https://developer.Android.com/reference/Android/app/Activity.html#onDestroy%28%29
Au lieu de cela, vous pouvez créer un service qui sera averti lorsque la tâche dans laquelle vos activités sont exécutées est détruite.
Créer la classe de service:
public class ClosingService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Handle application closing
fireClosingNotification();
// Destroy the service
stopSelf();
}
}
Déclarez/enregistrez votre service dans le manifeste (dans la balise de l'application, mais en dehors de toute balise d'activité):
<service Android:name=".services.ClosingService"
Android:stopWithTask="false"/>
Si vous spécifiez stopWithTask="false"
, la méthode onTaskRemoved()
sera déclenchée dans votre service lorsque la tâche sera supprimée du processus.
Ici, vous pouvez exécuter la logique de votre application de fermeture avant d'appeler stopSelf()
pour détruire le service.
Vous devriez lire des informations sur le cycle de vie de l'activité. Il y a une chose à propos de la méthode onDestroy, elle n'est pas appelée tout le temps. Vous ne devez pas compter dessus.
Précisez s'il vous plaît ce que vous essayez d'atteindre et je vais essayer d'offrir une meilleure solution.
Donc, si je vous ai bien compris, je peux suggérer une chose. Démarrez une Service
qui déclenchera LocalBroadcast
toutes les N secondes (le système n’est pas vraiment lourd). Inscrivez-vous et BroadcastReceiver
pour cette émission dans Activities
. De cette façon, vous obtiendrez true
ou false
selon qu'il existe ou non une BroadcastReceiver
pouvant saisir votre LocalBroadcast
. Et si aucun destinataire ne vérifie que quelque valeur SharedPreferences
indique si Button
a été enfoncé.