0
votes

Quels événements de cycle de vie sont appelés lorsqu'une application est supprimée de la liste des applications récentes?

Aussi loin que je comprenne depuis Cette question < / a> et le Référence officielle et guide , uniquement OnDestroy () est appelé, quand mon L'application est supprimée de la récente liste d'applications.

Dans mon application, j'ai une seule activité qui commence un service pour jouer de la musique. Dans l'Activité OnDestroy () , le service n'est même pas mentionné, mais je reçois toujours une exception illégale d'argument lorsque mon application est supprimée de la liste, pointant vers ledit service: xxx

comme dans OnDestroy () , le service n'est même pas mentionné, il doit y avoir autre chose à essayer d'accéder au service qui n'existe plus. Une idée de ce que cela pourrait être?

si Onpaause () et / ou OnStop () est également appelé, existe-t-il un moyen de distinguer l'enlèvement cas des autres cas dans lesquels ces deux sont appelés?


0 commentaires

3 Réponses :


1
votes

Lorsque vous ouvrez les applications récentes OnAUSAUSE et OnStop sont appelées, alors lorsque votre activité est éliminée uniquement OnDestroy est laissée dans le cycle de vie .

Pour votre exception Votre méthode OnStartCommand doit avoir la signature suivante xxx

selon le Documentation

Cela peut être null si le service est redémarré après son processus est parti, et il avait précédemment retourné quoi que ce soit sauf Start_sticky_compatibility.


2 commentaires

Si je le fais comme ça, comment puis-je utiliser des extras? Si je fais une intention nullable dans la signature, je rencontre des problèmes là-bas: si (intention.hadesextra ("jouer")) me donne "seulement?. Ou !!. Sont autorisés". Pour si (intention? .HaseXtra ("Play")) I Obtenir une incidence de type (attendu Intention , trouvé Intention? ) et pour ) et Code> Si (Intention !!. HasExtra ("Play")) Je reçois une exception NullPoinger au lieu de l'argument illégal.


Vous devez gérer le null. Vous pouvez revenir tôt si l'intention est NULL Ie Intention?: Retour Service.Start_not_sticky Vous devez également consulter les drapeaux qui sont transmis car ils vont indiquer ce qui est gong.



1
votes

comme dans OnDestroy (), le service n'est même pas mentionné, il doit y avoir quelque chose d'autre essayant d'accéder au service qui n'existe pas plus. Aucune idée de ce que cela pourrait être?

Dans certains téléphones, lorsque l'application est supprimée des applications récentes, elle ressemble à la définition et à la forte application Fermer. Donc, il ferme tous les services liés à l'application. C'est pourquoi vous avez fait face à un tel problème.

Si l'onpaause () et / ou Ontop () sont également appelées, y a-t-il un moyen de distinguer l'élimination des autres cas dans lesquels ces deux sont appelés?

Tant que je sais qu'il n'y a aucun moyen de distinguer l'étui d'élimination.

mais je reçois toujours une exception d'argumentation illégale jetée lorsque mon application est Supprimé de la liste

Pour résoudre ce problème, vous pouvez jeter un coup d'œil sur ce que ge3ng posté. Cela résoudra votre problème.


3 commentaires

Dans un service, il y a un rappel Ontockremoved qui sera appelé lorsqu'une application est éliminée par un utilisateur.


Qu'en est-il du moment où le système arrêter l'application? ou toute l'application s'est terminée? @ Ge3ng


Ensuite, il n'est pas garanti d'être appelé. Ontockremoved n'est garanti qu'à être appelé si l'utilisateur l'initie à la liste des applications récentes.



0
votes

Vous avez un qui renvoie start_sticky à partir de OnStartCommand () . Lorsque vous balayez la tâche de la liste des tâches récentes, Android tue le processus OS hébergeant vos activités et votre Service .

Étant donné que vous avez dit à Android (via start_sticky ) que vous souhaitez que votre service soit redémarré dans l'événement que Android tue ça, Android est conforme à votre demande et redémarre votre < Code> Service . Quand cela fait cela, il appelle OnStartCommand () avec un null Intention .

Remarque: je suppose que OnDestroy () ne s'appelle pas du tout sur vos activités. Vous pouvez ajouter une journalisation à OnDestroy () pour voir si c'est vrai.


0 commentaires