Android系统中Bitmap是否有调用recycle方法的必要性
2016-06-07 11:26
417 查看
Bitmap有一个recycle方法,意思很简单,回收Bitmap的空间。但是我们知道java有自己的垃圾回收机制,所以为什么BitaMap还需要这样一个专门的回收方法呢?
无需调用bitmap的理由有:
a. 垃圾回收会处理的;
b. 当application关闭,process被杀掉,所有这个process占用的空间自然回归系统;
虽然Android有自己的垃圾回收机制,对于是不是要我们自己调用recycle,还的看情况而定。如果只是使用少量的几张图片,回收与否关系不大。可是若有大量bitmap需要垃圾回收处理,那必然垃圾回收需要做的次数就更多也发生地更频繁,会对系统资源造成负荷。所以,这个时候还是自己试用recycle来释放的比较好。
如何去使用recycle()方法和何时试用recycle()都是值得考虑的问题。否侧,极易出现下面的异常:
java运行时异常:试图使用一个已经回收了的图片
只有当你确认你不会在使用这个bitmap的时候,就可以选择调用recycle()方法释放它。
其实上面说的都是废话,我觉得该不该使用recycle方法,完全取决于你自己的水平,经测,我本人不适合,因为我在自己认为bitmap已经完全不会再使用的地方调用了recycle方法结果在某些条件下还是出现了上面的异常。所以recycle方法虽好,但是你要能够驾驭,而且一般情况下是不需要他的。
注:如评论中那位仁兄所说的,以下情况如果recycle会发生错误:
当你根据id从drawable(drawable资源文件夹)中获取一个drawable时,系统会将这个drawable加入缓存之中。这样,你第二次继续获取这个drawable时,如果缓存之中的drawable没有被回收,则会被返回。
如果你通过getDrawable(id)方法获取到一个bitmap1,继续通过getDrawable(id)方法获取到一个bitmap2。那么bitmap1=bitmap2。所以,当你对bitmap1进行recycle之后,又将bitmap2设置给Imageview显示,极大可能会出现java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@xxx的错误。
无需调用bitmap的理由有:
a. 垃圾回收会处理的;
b. 当application关闭,process被杀掉,所有这个process占用的空间自然回归系统;
虽然Android有自己的垃圾回收机制,对于是不是要我们自己调用recycle,还的看情况而定。如果只是使用少量的几张图片,回收与否关系不大。可是若有大量bitmap需要垃圾回收处理,那必然垃圾回收需要做的次数就更多也发生地更频繁,会对系统资源造成负荷。所以,这个时候还是自己试用recycle来释放的比较好。
如何去使用recycle()方法和何时试用recycle()都是值得考虑的问题。否侧,极易出现下面的异常:
只有当你确认你不会在使用这个bitmap的时候,就可以选择调用recycle()方法释放它。
其实上面说的都是废话,我觉得该不该使用recycle方法,完全取决于你自己的水平,经测,我本人不适合,因为我在自己认为bitmap已经完全不会再使用的地方调用了recycle方法结果在某些条件下还是出现了上面的异常。所以recycle方法虽好,但是你要能够驾驭,而且一般情况下是不需要他的。
注:如评论中那位仁兄所说的,以下情况如果recycle会发生错误:
当你根据id从drawable(drawable资源文件夹)中获取一个drawable时,系统会将这个drawable加入缓存之中。这样,你第二次继续获取这个drawable时,如果缓存之中的drawable没有被回收,则会被返回。
如果你通过getDrawable(id)方法获取到一个bitmap1,继续通过getDrawable(id)方法获取到一个bitmap2。那么bitmap1=bitmap2。所以,当你对bitmap1进行recycle之后,又将bitmap2设置给Imageview显示,极大可能会出现java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@xxx的错误。
相关文章推荐
- Android 自动更新功能
- Android 动画 - AlphaAnimation渐变动画
- android 使用handler 与postDelayed时注意项
- android应用中为按键添加声音
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
- Android 弹出系统日历,添加提醒事件
- Material Design设计规范
- Android_数据存储
- android studio 自定义注释模板
- android基础之onActivityResult不执行问题
- Android实现自定义带文字和图片的Button
- [置顶] Android开发之Sensors与摇一摇
- android BroadcastReceiver 使用小结
- Android按钮单击事件的四种常用写法总结
- Android Studio官方版DrawerLayout侧滑菜单解析
- Android自定义View实现左右滑动选择出生年份
- 工具类
- Android之带遮罩层的弹出框—popUpWindow
- Android网页中启动Acitivity
- 学习过程中很好的博客地址收藏