0

Considérez ces deux exemples de code pour la méthode getView dans un adaptateur ListView. Sont-ils identiques en mémoire ou setImageResource fonctionne-t-il plus efficacement?Android - setImageResource est-il plus efficace que le décodage de l'ID de ressource en tant que bitmap?

Je sais que decodeResource crée un nouveau bitmap et mange un peu de mémoire à chaque fois. Donc, si je devais l'appeler suffisamment de fois avec des traînées assez grandes, cela provoquerait une erreur de mémoire. Mais je ne pouvais pas trouver avec setImageResource fonctionne dans le code source.

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView img = new ImageView(context); 
    img.setImageBitmap(BitmapFactory.decodeResource(getResources(),resIds[position])); 
    return img; 
} 


public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView img = new ImageView(context); 
    img.setImageResource(resIds[position]) ; 
    return img; 
} 

Répondre

0

Il est dit dans la documentation

Cette lecture fait Bitmap et le décodage sur le fil interface utilisateur , ce qui peut provoquer un accident de parcours de latence.

De plus, il est dit

Si c'est une préoccupation, pensez à utiliser setImageDrawable() ou setImageBitmap() et android.graphics.BitmapFactory à la place.

Ceci implique déjà une réponse à votre question: non, ce n'est pas plus efficace. Pour économiser la mémoire et l'exécution, stockez le résultat de BitmapFactory (ou Drawable) et assurez-vous qu'il n'est pas exécuté à chaque fois que ImageView est défini.