for (int imageId : mImageIds) {
Bitmap originalImage;
originalImage= BitmapFactory.decodeResource(
getResources(), imageId);
ImageView imageView=null;
imageView = new ImageView(mContext);
imageView.setImageBitmap(originalImage);
imageView.setLayoutParams(new myView.LayoutParams(
(int) ((6 * width) / 10), MenuHeight));
Log.i("MenuHeight", "" + MenuHeight);
Log.i("MenuWidth", "" + (6 * width) / 10);
imageView.setScaleType(ScaleType.MATRIX);
mImages[index++] = imageView;
originalImage.recycle();
}
我正在使用这个代码片段并且它试图使用循环位图给出异常,如果我没有回收位图它会消耗内存,所以你能告诉我在任何代码中最好使用bitmap.recycle的时间和地点
答案 0 :(得分:0)
这将解决它:
for (int imageId : mImageIds) {
if(originalImage!=null && !originalImage.isRecycled()){
Bitmap originalImage;
originalImage= BitmapFactory.decodeResource(
getResources(), imageId);
ImageView imageView=null;
imageView = new ImageView(mContext);
imageView.setImageBitmap(originalImage);
imageView.setLayoutParams(new myView.LayoutParams(
(int) ((6 * width) / 10), MenuHeight));
Log.i("MenuHeight", "" + MenuHeight);
Log.i("MenuWidth", "" + (6 * width) / 10);
imageView.setScaleType(ScaleType.MATRIX);
mImages[index++] = imageView;
originalImage.recycle();
originalImage = null;
}
}
答案 1 :(得分:0)
它会引发异常,因为您的位图在ImageView中使用。要调用回收,您的位图不必链接到视图。
由于您的所有照片都显示(或链接到物理视图对象),因此无法回收。
处理问题的一种方法是为每张照片使用更少的内存。