2010-06-15 4 views
0

J'ai une application qui génère dynamiquement de 6 à 100 petites images pour que l'utilisateur puisse se déplacer sur l'écran dans une session donnée. Je les génère actuellement en onCreate et les stocke sur la carte SD, de sorte qu'après un changement d'orientation, je puisse les sortir du stockage externe et les afficher à nouveau. Cependant, cela prend du temps (le chargement) et je voudrais garder les références bitmap autour entre les changements de vie pour un accès plus rapide.Android - Où stocker les bitmaps générés?

Ma question est, y at-il un meilleur endroit pour stocker mes bitmaps générés? Je pensais à créer une bibliothèque de stockage statique dans mon activité de base, quelque chose qui n'aurait besoin d'être rechargé que lorsque l'application serait complètement retirée de la mémoire (arrêt, autres applications nécessitant des ressources, redémarrage de 30 minutes, etc.).

Idéalement, je voudrais que l'utilisateur soit en mesure de revenir en arrière à l'écran de titre, cliquez sur un bouton « Reprendre », et onCreate j'ai juste accès à ces références bitmap résidentes au lieu d'avoir à les charger à partir du stockage encore. Pour cette raison, je ne pense pas Activity.onRetainNonConfigurationInstance est ce dont j'ai besoin.

Sinon, existe-t-il un meilleur moyen de gérer plusieurs images bitmap générées que ce que je fais ou le plan que j'ai décrit?

Répondre

5

Vérifiez de manière certaine le blog post de Romain Guy sur la conservation des bitmaps générés lors du changement d'orientation. Cela ressemble à un cas presque identique. L'essentiel est, vous pouvez utiliser onRetainNonConfigurationInstance/getLastNonConfigurationInstance pour passer/recevoir un objet arbitraire à travers la destruction de l'activité liée à l'orientation. Cela ne vous aidera pas à reculer et à recommencer l'activité, cependant.

Vous pouvez également entasser bitmaps dans un objet cache comme statique (peut-être un HashMap SoftReference sur une classe Application), mais attention à ne pas stocker dessinables ou vues, ce qui peut provoquer memory leaks en raison de leur référence à leur activité contenant. Cela persisterait pendant toute la durée de vie de l'application, mais j'éviterais autant que possible que tout état global puisse causer des problèmes horribles et difficile de trouver des fuites de mémoire là où les choses référencent des instances d'activité.

+0

J'avais l'impression que l'idée de cache ne volerait pas. Je ne mettrais que des bitmaps (donc pas de fuite de contexte), mais je suppose que j'avais juste besoin de pousser dans la bonne direction. On dirait que onRetain est le chemin à parcourir alors. – Josh

Questions connexes