4 votes

Singleton est détruit

J'ai une activité qui démarre un service. Il y a aussi un singleton Data impliqué. Lorsque je ferme l'activité en allant sur l'écran d'accueil, le singleton Data est détruit après un certain temps, mais, comme il se doit, le service continue de fonctionner. Par conséquent, certains champs de Data redeviennent null, et le service rencontre des nullpointers.

Comment puis-je empêcher cela de se produire?

6voto

Sean Owen Points 36577

Autant que je sache, les instances Activity sont lancées à l'intérieur de leur propre classloader, pour des raisons de sécurité. Tout singleton attaché à une classe chargée en conséquence de chargement de votre Activity est lié à ce classloader, qui est à son tour lié au cycle de vie de l'activité.

En d'autres termes, je ne pense pas que vous puissiez garantir que cela n'arrivera pas, et donc, vous ne devriez pas vous y fier.

Vous devez sérialiser tout état persistant et ensuite le désérialiser lorsque l'Activity démarre.

1voto

Une façon dont nous réalisons cela est de stocker une référence à votre objet dans votre sous-classe de l'Application que vous créez. Il s'agit d'une solution de contournement simple qui fonctionne dans la plupart des cas sans avoir besoin de créer un Service ou de devoir sérialiser l'état tout le temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X