Domanda ImageView.setImageBitmap () ricicla la bitmap precedentemente impostata?


Diciamo che ho un codice simile a quello qui sotto:

protected void onCreate(Bundle bundle){

    this.imageView = (ImageView) contentView.findViewById(R.id.imageView);

    this.setFirstBitmap();
    this.setSecondBitmap();
}

private setFirstBitmap(){
    Bitmap bitmap1 = BitmapFactory.decodeFile(bitmapFile1);
    imageView.setImageBitmap(bitmap1);
}

private setSecondBitmap(){
    Bitmap bitmap2 = BitmapFactory.decodeFile(bitmapFile2);
    imageView.setImageBitmap(bitmap2);
}

In questo caso, imageView ricicla bitmap1 o devo farlo prima di impostare bitmap2?


12
2018-03-17 06:48


origine


risposte:


ImageView non rilascia automaticamente i bitmap

Succede come spiegato da @Vipul

Il riferimento alle bitmap deve essere rilasciato chiamando bitmap.recycle()

Quando si desidera assegnare un'altra bitmap a ImageView, riciclare la precedente chiamando

((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();

Dare un'occhiata a Questo


19
2018-03-17 07:12



Quando si tenta di decodificare e impostare la seconda bitmap, Java comunicherà a GC che la prima bitmap deve essere riciclata poiché lo sviluppatore non la utilizza più. GC lo farà in un secondo momento.

Ma se fai un uso estensivo di Bitmap (la velocità di allocazione potrebbe essere maggiore della velocità con cui viene eseguita la ricomposizione della bitmap), potresti voler riciclare i bitmap inutilizzati al più presto. Dovresti chiamare recycle () quando hai finito di utilizzare la bitmap. (Ricorda sempre di non provare a riciclare bitmap quando viene visualizzato sullo schermo.)


8
2018-03-17 06:59