一、Bitmapのrecycle問題


Androidには独自のゴミ回収メカニズムがありますが、recycleを自分で呼び出すかどうかは、状況次第です.わずか数枚の画像を使うだけなら、回収するかどうかは関係ありません.しかしbitmapが大量にごみ回収処理を必要とすると,必然的にごみ回収を必要とする回数がより多く,より頻繁に発生し,システム資源に負荷をもたらす.だから、この時は自分で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を行う必要があります.