Android: accès aux images à partir de ressources / dossiers à dessiner

l'application sur laquelle je travaille a des centaines d'images. Au moment où je les stocke dans le dossier "Drawable". Je pensais les transférer tous dans le dossier des actifs.

ma question Est la suivante: y a-t-il une différence de rendement entre les deux approches?

25
demandé sur Marqs 2011-12-06 16:47:48
la source

4 ответов

je ne pense pas donc il y a peu de différence dans la performance de l'utilisation de ces deux dossiers, je pense que l'utilisation drawable dossier, vous pouvez obtenir facilement des images (Tous seront indexées dans la R de fichier, ce qui le rend beaucoup plus rapide (et beaucoup plus facile!) pour les charger.), et Si vous voulez l'utiliser à partir de l'actif, alors vous devez utiliser AssetManager puis en utilisant AssetFileDescriptor vous devez obtenir ces images.

  • Assets peut aussi être organisé en une hiérarchie de dossiers, qui n'est pas pris en charge par ressources. C'est une autre façon de gérer les données. Bien que les ressources couvrent la plupart des cas, les actifs ont leur une utilisation occasionnelle.

  • Dans le res/drawable répertoire chaque fichier reçoit un ID précompilé qui est facilement accessible par R. id.[res id]. Cela est utile pour accédez rapidement et facilement aux images, sons, icônes...

10
répondu user370305 2011-12-06 17:04:41
la source

pour autant que je sache, il ne devrait pas y avoir de grande différence, mais je préférerais aller avec Drawable.

Drawable vous donne, en plus de l'indexation, la possibilité de lutter contre la fragmentation de la densité de l'écran et les actifs ne devraient pas dépendre de la densité. Avoir de grandes images sur des écrans plus petits et/ou des téléphones à faible spécification (RAM, CPU) peut causer de réels problèmes et influencer la convivialité et la réceptivité de l'application.

3
répondu vbokan 2011-12-06 18:07:20
la source

je pense que la principale différence entre ces deux, c'est que Drawable dossier est indexé et vous pouvez obtenir à l'utilisation de l'android autres ressources charger... Je pense donc qu'il n'y a pas de différence de performance entre ces dossiers ressources.

0
répondu Cata 2011-12-06 17:03:59
la source

en fait, j'ai aussi rencontré les problèmes. Je veux que L'image D'ImageView de mon application soit chargée à partir d'assets/ au lieu de res/drawables, de sorte que je puisse mettre à jour mon application à partir d'internet de manière dynamique.

de mon test / sentiment la performance est susceptible d'être très différente si vous ne faites pas attention.

         //v.setImageBitmap(ImageUtil.getBitmapFromAsset(this, "data/dog/dog_0001.png", 60, 60));
        //v.setImageDrawable(ImageUtil.getDrawableFromAsset(this, "data/dog/dog_0001.png"));
        v.setImageResource(R.drawable.dog_0001);

mon appli fera l'affaire dans Activite's onCreate. il semble prouvé que setImageResource est le plus rapide.

la raison de mon point est que le décodage de l'actif cela prendra du temps qui bloquera le thread de L'interface utilisateur, alors que définir l'ID de la ressource est plus rapide que le décodage. j'ai vu le code dans setImageResource qui semble aussi charger l'image. Je ne sais pas pourquoi mon décodage est plus lent que setImageResource. mais je pense que setImageResource est le plus rapide. j'essaie de laisser le décodage asynchry décoder puis de définir bitmap.

0
répondu RyanShao 2015-04-04 16:01:14
la source

Autres questions sur