2010-09-01 12 views
1

J'ai une ListActivity contenant un objet que j'ai défini appelé MessageItem. Je souhaite transférer les données de cet objet MessageItem à un service pour effectuer certaines tâches, mais je ne souhaite pas que l'activité soit liée au service de telle sorte qu'Android ne puisse pas récupérer l'activité si nécessaire (fuite de mémoire ergo).). Ce que je fais est de passer l'objet MessageItem à une méthode dans une classe singleton avec le contexte de l'application. La méthode singleton utilise l'application Context pour démarrer mon service. Je passe à ce service une intention. Dans cette intention, je mets des éléments de l'objet MessageItem comme ceci:Est-ce une fuite de mémoire?

intent.putExtra("subject", msg.getSubject()); 
    intent.putExtra("summary", msg.getSummary()); 
    intent.putExtra("created_on", msg.getCreatedDate()); 
    intent.putExtra("read", msg.getIsRead()); 

Est-ce que ces données se lier mon activité au service l'intention est transmis dans et provoquer une fuite de mémoire?

Serait-ce une meilleure mise en œuvre ?:

intent.putExtra("subject", new String(msg.getSubject())); 
    intent.putExtra("summary", new String(msg.getSummary())); 
    intent.putExtra("created_on", new Integer(msg.getCreatedDate())); 
    intent.putExtra("read", new Boolean(msg.getIsRead())); 

Répondre

4

Vous n'avez pas besoin de nouveau String ou Integer. Lorsque les données sont transférées par intention, Il sera morcelé et non réparti.

+0

Ah oui, bien bon – Andrew

+0

Est-ce que Android est appelé ce que vous appelez, plutôt que de simplement l'appeler en boîte? – Powerlord

2

Est-ce que ces données se lier mon activité au service

Non, le code ci-dessus les références dans l'activité à l'intention . Les valeurs string et boolean n'ont aucun pointeur vers l'instance.

Serait-ce une meilleure implémentation?

Non! Ce serait bien pire. Beaucoup de données seraient copiées et beaucoup d'objets seraient créés pour rien.

+0

Merci pour votre clarification – Andrew