一、Bitmapのrecycle問題
Androidには独自のゴミ回収メカニズムがありますが、recycleを自分で呼び出すかどうかは、状況次第です.わずか数枚の画像を使うだけなら、回収するかどうかは関係ありません.しかしbitmapが大量にごみ回収処理を必要とすると,必然的にごみ回収を必要とする回数がより多く,より頻繁に発生し,システム資源に負荷をもたらす.だから、この時は自分でrecycleを使ってリリースしたほうがいいです.
recycle()メソッドをどのように使用するか、recycle()をいつ試用するかは考慮に値する問題です.No側では、次の異常が発生しやすくなります.
このbitmapを使用しないことを確認した場合にのみ、recycle()メソッドを呼び出して解放することができます.
今日、小さなテストをしたとき、recycle()の呼び出しで異常が発生しました.理由は次のとおりです.
xmlファイルでは、ImageViewには2つの方法で表示される画像を設定します.
最初はbackgroundを使ってプログラムで設定しました
imageView.setImageBitmap()メソッドは、backgroundではなく、対応するsrcのピクチャを設定するためです.私はbackgroundの画像を回収しました.これにより、異常が発生します.
したがって、setBackGround()メソッドを呼び出すコードに変更します.
したがって、ImageViewピクチャのソースの問題に注意し、対応するrecycleを行う必要があります.
recycle()メソッドをどのように使用するか、recycle()をいつ試用するかは考慮に値する問題です.No側では、次の異常が発生しやすくなります.
05-15 08:31:00.117: E/AndroidRuntime(513): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@44c093b8
javaランタイム異常:回収されたピクチャを使用しようとしたこのbitmapを使用しないことを確認した場合にのみ、recycle()メソッドを呼び出して解放することができます.
今日、小さなテストをしたとき、recycle()の呼び出しで異常が発生しました.理由は次のとおりです.
xmlファイルでは、ImageViewには2つの方法で表示される画像を設定します.
android:background="@drawable/aa"
android:src="@drawable/aa"
最初はbackgroundを使ってプログラムで設定しました
// ImageView
Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();
Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
bitmap1.getHeight(), matrix, true);
// ,
if (!bitmap1.isRecycled()) {
bitmap1.recycle();
}
// Matrix
imageView.setImageBitmap(bitmap2);
imageView.setImageBitmap()メソッドは、backgroundではなく、対応するsrcのピクチャを設定するためです.私はbackgroundの画像を回収しました.これにより、異常が発生します.
したがって、setBackGround()メソッドを呼び出すコードに変更します.
// ImageView
Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();
Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
bitmap1.getHeight(), matrix, true);
// ,
if (!bitmap1.isRecycled()) {
bitmap1.recycle();
}
// Matrix
//imageView.setImageBitmap(bitmap2);
imageView.setBackgroundDrawable(new BitmapDrawable(bitmap2));
したがって、ImageViewピクチャのソースの問題に注意し、対応するrecycleを行う必要があります.