Question

J'ai un singleton qui stocke des informations sur l'utilisateur prudent de ma demande. À l'heure actuelle, il stocke le login et l'emplacement de l'utilisateur de l'utilisateur.

1) L'emplacement se trouve via un service. À l'heure actuelle, le service fait référence à mon singleton directement à farcir la longitude et la latitude en elle. Je voudrais utiliser un BroadcastReceiver pour envoyer une émission que les Entend et utilisations singleton pour mettre à jour les valeurs, au lieu.

Cependant, pour enregistrer le BroadcastReceiver, je besoin d'un contexte dans mon singleton. Quelle est la slickest façon d'atteindre ce que je suis vouloir. BroadcastReceiver est peut-être pas l'objet approprié?

2) En outre, quels sont les problèmes que je regarde avec l'aide d'un singleton? Je suppose que Android va probablement récupérer cette mémoire à un moment donné (ce qui serait évidemment mauvais); Comment puis-je empêcher cela? Would passant dans le contexte de l'application et le stockage dans une variable membre traversin cela?

Les états de documentation Android: « Mais, le cycle de vie d'un statique est pas bien sous votre contrôle, afin de se conformer au modèle du cycle de vie, la classe d'application devrait initier et détruire les objets de ces statiques dans le onCreate () et les méthodes OnTerminate () de la classe d'application », mais je ne suis pas tout à fait sûr comment effectuer cette opération.

Était-ce utile?

La solution

  

Cependant, pour enregistrer le BroadcastReceiver, je besoin d'un contexte dans mon singleton. Quel est le   slickest façon d'obtenir ce que je suis vouloir. Est-ce BroadcastReceiver peut-être pas le cas> objet?

La « slickest voie » est de ne pas faire ce que vous faites. S'il vous plaît n'enregistrer un BroadcastReceiver d'un Activity, Service, ou peut-être un Application. Vous doit désinscription ce BroadcastReceiver lorsque le Activity, Service ou Application est détruit.

  

Je suppose que Android va peut-être récupérer cette mémoire à un moment donné (qui   de toute évidence être mauvais); Comment puis-je empêcher cela?

Vous ne le faites pas. Android se réserve le droit de mettre fin à votre processus à tout moment (par exemple, pour récupérer la mémoire). tueurs sur la tâche Android 2.1 et précédent mettra fin à votre processus à tout moment. Une fois que tous les composants de votre application sont détruits, Android peut recycler votre processus à tout moment, déblayer votre tas en même temps. Et ainsi de suite.

seulement mettre les choses en mémoire que vous ne me dérange pas de perdre.

Il est préférable de penser à votre « application » comme un panier de composants faiblement couplés, et non comme une entité monolithique.

  

Would passant dans le contexte de l'application et de la stocker dans une variable membre traversin   cela?

Non.

  

Les états de documentation Android: « Mais, le cycle de vie d'un statique est pas bien sous votre   contrôle; afin de se conformer au modèle de cycle de vie, la classe d'application devrait lancer et   méthodes de démontage de ces objets statiques dans le onCreate () et (OnTerminate) le   Classe d'application « , mais je ne suis pas tout à fait sûr comment effectuer cette opération.

Créer une sous-classe de Application et d'indiquer dans le manifeste que Android devrait l'utiliser, via l'attribut android:name sur l'élément <application>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top