trying to use a recycled bitmap分析
来源:互联网 发布:淘宝集市店 编辑:程序博客网 时间:2024/06/05 04:05
最近遇到了这个问题:
trying to use a recycled bitmap android.graphics.Bitmap@1d5a0d5c.
于是,写个程序复现这个情况;
public class MainActivity extends AppCompatActivity { ImageView imageView; Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.iv); bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.aaa); imageView.setImageBitmap(bitmap); try{ if(bitmap!=null&&!bitmap.isRecycled()){ bitmap.recycle(); } }catch (Exception e){ } } public void onClickFinish(View view){ finish(); } @Override protected void onDestroy() { super.onDestroy(); }}
情景分析:
程序顺序执行,使用图片工厂获取图片后让ImageView显示,即ImageView持有bitmap,此时又继续执行了判断显然bitmap不为空,所以
bitmap调用recycle()方法回收。这就导致一个问题,原来bitmap是归ImageView持有现在回收了,此时ImageView持有一个被回收的数据,所以会报这样的错误。
解决办法:
bitmap什么时间回收呢?这涉及一个回收时机问题
bitmap没有被引用时回收,也就是不再使用。
所以对于一个activity而言,在onDestory()方法中调用 finish方法执行时回收
代码:
@Override protected void onDestroy() { super.onDestroy(); if(bitmap!=null&&!bitmap.isRecycled()){ bitmap.recycle(); bitmap = null; } }
下面列举我所遇到bitmap回收使用情况:
Bitmap 情况分析:
1.
oldbitmap作为参数传入方法中,然后使用传入bitmap重新生成新的bitmapA
此时 if(bitmapA!=null){
oldbitmap.recycle();
oldbitmap = bitmapA;
}
是正确的。
2.
如果根据res 生成bitmap
此时
Bitmap getBitmap(Bitmap mbitmap) { Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.cccc); if (bm != null) { mbitmap.recycle(); mbitmap = bm; } return mbitmap;}
是正确的
3.
传入参数bitmap基础上又形成新的bitmap
Bitmap getBitmap(Bitmap mbitmap) { Matrix matrix = new Matrix(); matrix.postScale(1, 1); // 长和宽放大缩小的比例 Bitmap resizeBmp = Bitmap.createBitmap(mbitmap, 0, 0, 200, 200, matrix, false); if (mbitmap != null) { mbitmap.recycle(); } return resizeBmp;}
此时 正确
阅读全文
0 0
- trying to use a recycled bitmap分析
- trying to use a recycled bitmap解决之道
- Canvas: trying to use a recycled bitmap android.graphics.Bitmap
- Canvas: trying to use a recycled bitmap android.graphics.Bitmap
- Android bitmap.recycle()导致trying to use a recycled bitmap报错分析
- 分析Canvas: trying to use a recycled bitmap android.graphics.Bitmap@84709c2
- java.lang.RuntimeException: Canvas: trying to use a recycled bitmap
- RuntimeException: Canvas: trying to use a recycled bitmap
- androird textview trying to use a recycled bitmap android.graphics
- Trying to use recycled bitmap的来龙去脉
- 【Bitmap】Canvas: trying to use a recycled bitmap android.graphics.Bitmap问题
- Bitmap的recycle后Canvas: trying to use a recycled bitmap android.graphics.Bitmap问题
- 解决Bitmap recycle异常:Canvas: trying to use a recycled bitmap android.graphics.Bitmap
- 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap
- Bitmap回收异常:trying to use a recycled bitmap android.graphics.Bitmap问题解决
- Android Bitmap回收异常:Canvas: trying to use a recycled bitmap android.graphics.Bitmap解决
- 有关Bitmap使用时报错 Canvas: trying to use a recycled bitmap
- 今天遇到Canvas: trying to use a recycled bitmap android.graphics.Bitmap问题
- 移动web开发要点总结
- 分布式搜索elasticsearch java API 之(二)------put Mapping定义索引字段属性
- PYTHON 一些基础面试题目总结【1】
- 从零开始学java(九)流程控制
- 常见网络问题
- trying to use a recycled bitmap分析
- 剑指offer 调整数组的顺序使奇数位于偶数前面
- 仿ofo首页眼睛跟随加速器移动效果
- Android 中的BroadCastReceiver
- 2.1将工具栏添加
- Error getting authority: Error initializing authority: Could not connect: No such file or directory
- tomcat8源码之架构解析
- 工厂模式之——【抽象工厂模式】
- <Jupyter Notebook>如何用一台服务器给多个 Jupyter 用户提供服务