2016-09-13 6 views
0

J'ai le cas suivant:Je veux mieux connaître les approches sur la façon de passer bitmaps dans différentes activités

Activité1

public class Activity1 extends Activity{ 
    ImageUtils.setArt(bitmap); 
} 

Activity2

public class Activity2 extends Activity{ 
    Bitmap b= ImageUtils.getArt(); 
} 

ImageUtils

public class ImageUtils{ 
    private static Bitmap mArtWork; 
    public static Bitmap getArt(){ 
    return mArtWork; 
} 

public static void setArt(Bitmap art){ 
    this.mArtWokr=art; 
} 

Maintenant, je besoin d'une bonne approche, de partager Bitmap s entre les différents Activity s.

Depuis static variables ne seront pas Garbage recueillies lors de l'exécution de mon application, j'ai besoin d'un bon moyen de partager les images parmi mes scénarios.

Je songe à utiliser un singleton "ImageUtils" pour contenir mes images, puis y accéder.

J'ai pris en compte et ignoré le passage de bitmaps pareaceable, et même partage URI par des intentions, mais ceux qui ont eu de mauvais résultats.

Y a-t-il de meilleures approches?

+0

* Objets statiques wont b Garbage collecté * ils sont quand votre application est fermée –

+0

ouais je sais évidemment qu'ils seraient lorsque l'application est fermée Je parle de quand l'application est activée et l'utilisateur l'utilise. –

Répondre

0

Ce n'est pas une bonne idée de passer un bitmap dans la mémoire, car le bitmap n'est pas compressé en mémoire. Essayez peut-être de l'enregistrer dans un fichier temporaire et de charger dans une autre activité ...

+0

Pourquoi diriez-vous que le surcoût supplémentaire créé par le fichier E/S est préférable à l'utilisation du champ statique? –

+0

Cela dépend de la taille de l'image bitmap, cela pourrait amener OutOfMemoryError si elle est trop grande ... Si la taille n'est pas un problème, il est préférable de la passer dans la mémoire bien sûr. – RRTW

1

Essayez d'utiliser le cache mémoire (cache LRU par exemple) ou le cache disque (E/S fichier par exemple). C'est la manière suggérée par Google sur la façon de mettre en cache des bitmaps. Les documents google sont here.

  1. Enregistrer l'image dans le cache dans votre Activité1
  2. Obtenez le bitmap dans le cache dans Activity2, si son null, le télécharger à nouveau

Taille du Jeu de yur cache LRU. Si la taille totale des images dépasse le maiximun du cache LRU que vous avez défini, les images les moins récemment utilisées seront supprimées. C'est ainsi que fonctionne le cache LRU. Alors que si vous enregistrez les images sur le disque, n'oubliez pas de supprimer les images lorsque vous avez fini de les utiliser.

+0

ouais c'est ce que je cherchais .... –

+0

mais quel problème pourrait être avec mon approche et en chargeant des images du téléphone et j'ai besoin de montrer une image à la fois? –

+0

Si vous lisez des images à partir du téléphone, pourquoi transmettre l'image d'Acticity1 à Activity2. Il suffit de passer le chemin de l'image. Lisez-le depuis Activity2. Si vous voulez toujours utiliser votre classe singleton, après avoir fini d'utiliser le bitmap, mettez-le à null dans votre classe singleton, sinon cela pourrait causer un problème de MOO.J'espère que cela aide. – Chenmin