2015-03-17 1 views
0

J'ai une application où je crée un service de premier plan pour m'assurer qu'un téléchargement initié par l'utilisateur continue même si l'utilisateur quitte l'application ou l'application est tué par la pression de la mémoire.Est-ce que mon singleton sera tué?

Le service et l'application utilisent un singleton pour transmettre des données. Je sais que ce n'est pas la meilleure solution, alors je vous prie de vous abstenir de tout commentaire sur les singletons bad-bad car la question ne se trouve pas ici:

Lorsque je ferme l'application, mon service d'avant-plan continue à fonctionner et peut accéder au singleton. Y a-t-il un risque que le singleton soit ramassé en raison de la pression de la mémoire ou y a-t-il d'autres risques liés à la mémoire d'utiliser un singleton dans ce cas?

Répondre

0

Les variables statiques ne sont détruites que lorsque l'application est supprimée. Donc, ils ne vont pas disparaître au hasard pendant que votre service est en cours d'exécution. Toutefois, si l'ensemble de votre service redémarre, vous devez tenir compte de la possibilité de ne pas avoir le singleton lors du redémarrage.

0
  1. Il n'y a rien de mal à propos des singletons. Mais comme tout autre modèle ou méthode, il pourrait juste être utilisé incorrectement.
  2. En raison de la pression de la mémoire ou pour toute autre raison, un système pourrait tuer votre application. Mais votre Service sera relancé plus tard.
+0

Mon service est un service ** d'avant-plan **, ce qui signifie que les risques d'être tué en raison de la pression de la mémoire sont négligents. La question est une fois que l'activité a été tuée, y a-t-il une chance que le singleton s'en mêle? –

+0

@AlexandreG Si votre singleton est en quelque sorte connecté avec 'gc root', alors' gc' ne peut littéralement pas éliminer votre singleton. Il semble que vous mélangez les notions de gc et de système. Le système tue le processus, mais gc juste les objets sans références à 'gc root'. – eleven

+0

Être un service d'avant-plan ne compte pas autant que vous le pensez, ils peuvent aussi être tués, ils sont simplement tués plus tard. En fait, je pense que la plupart des services mentent et disent qu'ils sont au premier plan ces jours-ci. –

0
  1. modèle Singleton est un modèle très utile dans le système en raison de ce qu'il est un format statique. Un seul objet est nécessaire pour coordonner les actions à travers le système. Vous n'avez pas besoin de vous soucier de la duplication ou vous créez accidentellement plusieurs modules.
  2. Un service de premier plan est un service qui est considéré comme étant quelque chose dont l'utilisateur est conscient (a le focus) et qui n'est donc pas un candidat que le système peut tuer lorsqu'il manque de mémoire. L'objet squelette ne sera pas tué.