Bitmap recycle()

Bitmap调用recycle? When?

 

 

Bitmap有一个recycle方法。含义很easy,恢复Bitmap空间。

 

Q 1: Bitmap有调用recycle方法的必要性?

A: 嵌入式系统总是格外注重空间的问题,不小心的话就会有OOM。

可是应用层使用java的android平台有其天然的优势【java语言有自己的垃圾回收,android平台上各个application有自己的process自己的空间】。

    无需调用bitmap的理由有:

    a. 垃圾回收会处理的。

    b. 当application关闭,process被杀掉。全部这个process占用的空间自然回归系统;

 

    可是。假设你有点洁癖。或者有点理想主义。或者非常有控制欲,或者非常闲。。。

bitmap的recycle函数的调用还是能够是有必要的,理由有:

    a. 垃圾回收尽管好使,可是有可能的话,我们还是让它少干点活吧。

垃圾回收有非常大的未来不确定性,会加重未来未知时间点的loading,若有大量bitmap须要垃圾回收处理,那必定垃圾回收须要做的次数就很多其它也发生地更频繁,小心会造成ANR。

可是,若是自己recycle。就能够可控制地分散处理了这些回收任务了。

    b. 若是launcher那样一直执行的application,它的process一直存在,memory问题还是多多注意下比較好。

 

Q2: When?

A: Timing的问题在这里非常重要。

早了就大事不好了,会有这种Exception:

    java.lang.RuntimeException,Canvas: trying to use a recycled bitmap

android.graphics.Bitmap@44ebeee0,Canvas.java,955

    So, 如何才干够保证不会早了呢?

    关于图片显示。重要的时间点:

    step1: 设置进去的时间点。

    Step2: 画面画出来的时间点;

    最保险最笨的做法,在新的图片设置进去以后再recycle掉老的图片,这样做的坏处在于,在某个时间段,你须要的空间是double的【新旧两套都在】。

    假设你不偏向于那么做,又有时间,能够考虑后面一个时间点,除了setImage以及其他代码中显示调用那个bitmap的时候我们会检查bitmap,在acticvity变为visible的时候系统还是会去找之前设置进去的bitmap【即使你的onResume方法里面并没有提到去refresh UI。这件事情它也是会去做的,大概不然它就不知道这次该显示些什么了】。

所以,在UI线程里面,在一个不可能被打断的方法里面。是先设置新的bitmap还是先recycle旧的图片是没有影响的。

    譬如说     mBitmap.recycle();

                  mBitmap = .....   //设置

                  mImageView.setImage(mBitmap);

    这种代码是全然能够的。

 

    后面这种做法,最重要的就是确保:在UI线程【由于设置UI显示仅仅能在UI主线程里】里面一个不可能被打断的方法里面。

这个是为了确保在两者之间UI主线程不可能被打断。不可能刚好从invisible变成visible。

    所以,特别小心两种东西:

    1. 多线程【个人认为最好不要在其它线程里面调用UI用过的bitmap的recycle方法,多线程之间是非常难保证时间顺序的。临时没有想出一种在background thread里面recycle的合理的方式】。

    2. 非及时发生的方法:譬如。发intent啊。发notify啊去通知UI主线程去做UI又一次刷新并不能替代mImageView.setImage(mBitmap);这种句子。全然有可能,你确实发了intent出去了。可是目标activity之中的一个还没有做UI又一次设置【Q: maybe没收到 or 收到但还是等待处理。不确定这两种可能是不是都有可能】,这个时候这个acitivity变成visible了,系统仍然试图找旧的图片。找不到了就会报exception了。

 

PS: java.lang.RuntimeException,Canvas: trying to use a recycled bitmap android.graphics.Bitmap@44ebeee0,Canvas.java,955 这种exception也许你可能无法看到,默认log这似乎仅能够看到uncaught exception,我第一次看到monkey的events.log里面,如果你知道如何在这方面打开相应的电话log trace你也应该能看到。

 

转载于:https://www.cnblogs.com/hrhguanli/p/4576822.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展欧几里得算法求逆元_从辗转相除法到求逆元,数论算法初体验

今天是算法和数据结构专题的第22篇文章,我们一起来聊聊辗转相除法。辗转相除法又名欧几里得算法,是求最大公约数的一种算法,英文缩写是gcd。所以如果你在大牛的代码或者是书上看到gcd,要注意,这不是某某党,…

[翻译] Fast Image Cache

https://github.com/path/FastImageCache Fast Image Cache is an efficient, persistent, and—above all—fast way to store and retrieve images in your iOS application. Part of any good iOS applications user experience is fast, smooth scrolling, and Fast Image …

centos 安装 MatConvNet (gpu)

1. 安装准备 matlab2017a ,参考:《centos 安装matlab2017a(无root权限)》 GCC 4.8(支持c11) 键入:sudo yum install gcc gcc-c (建议sudo装) 至少CUDA 7.5,(本人选择cuda8.0&#xff…

php练习 租房子

题目要求 1.封装类 <?php class DBDA {public $fuwuqi"localhost"; //服务器地址public $yonghuming"root";//用户名public $mima"";//密码 public $dbconnect;//连接对象//操作数据库的方法//$sql代表需要执行的SQL语句//$type代表SQL语…

【SHARE】WEB前端学习资料

参考资料&#xff1a;https://github.com/karlhorky/learn-to-program学习网站&#xff1a;http://www.codecademy.com/learn https://www.codeschool.com/ 制作网站&#xff1a;https://webmaker.org/zh-CN/explore JavaScript2015&#xff1a;https://esdiscuss.org/topic/ja…

python软件安装和使用方法_aws cli的安装及使用(内含python的安装方法)

liunx环境(使用bundled installer)&#xff1a;1.wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip //下载bundled installer2.unzip awscli-bundle.zip3.sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws如果你没有sudo权限或者是你想在当…

centos 安装boost(caffe需要)

安装 由于安装caffe&#xff0c;要求boost的版本在1.55以上&#xff0c;而服务器上的刚好是1.54,所以进行了重装。 参考&#xff1a;《CentOS 7下编译安装Boost_1_57_0 》 不过由于pycaffe需要boost.python,因此需要在./b2时修改为./b2 –stage debug 才可以。而不能去掉py…

JAVA正则表达式介绍和使用

本文引用自 http://www.cnblogs.com/android-html5/archive/2012/06/02/2533924.html 技术博客 1.Java中在某个字符串中查询某个字符或者某个子字串 Java代码 String s "Shang Hai Hong Qiao Fei Ji Chang";    String regEx "a|F"; //表示a或F Pat…

集合框架中的接口及其实现类

Collection&#xff1a;集合层次中的根接口&#xff0c;JDK没有提供这个接口直接地实现类。Set&#xff1a;不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。List&#xff1a;是一个有序的集合&#xff0c;可以包含重复的元素。提供了按索引访问的方式。Map&#x…

C# 多线程 Parallel.For 和 For 谁的效率高?那么 Parallel.ForEach 和 ForEach 呢?

还是那句话&#xff1a;十年河东&#xff0c;十年河西&#xff0c;莫欺少年穷。 今天和大家探讨一个问题&#xff1a;Parallel.For 和 For 谁的效率高呢&#xff1f; 从CPU使用方面而言&#xff0c;Parallel.For 属于多线程范畴&#xff0c;可以开辟多个线程使用CPU内核&#x…

cuda、cudnn相关问题链接

1. cuda&#xff0c;cudnn安装 <caffe安装系列——安装cuda和cudnn> 2. 查看已有的cuda等版本 cuda 版本 cat /usr/local/cuda/version.txtcudnn 版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 23. cudnn的安装&#xff0c;路径和版本问题 http://…

bigdecimal 小于等于0_图解小于 K 的两数之和

点击蓝色“五分钟学算法”关注我哟加个“星标”&#xff0c;天天中午 12:15&#xff0c;一起学算法作者 | P.yh来源 | 五分钟学算法题目描述 题目来源于 LeetCode 上第 1099 号问题&#xff1a;小于 K 的两数之和。给你一个整数数组 A 和一个整数 K&#xff0c;请在该数组中找出…

用STS创建Maven的Web项目转

右键New——>other——》Maven——》Maven Project 弹出框中点击Next&#xff0c;在Filter中写上&#xff1a;webapp. 然后在下面的框中选择org.apache.maven.archetypes&#xff0c;点击Next 在新弹出的窗口中写上Group Id和Artifact Id&#xff0c;Finish即可成功。 创建完…

img超出div width时, jQuery动态改变图片显示大小

参考&#xff1a; 1. http://blog.csdn.net/roman_yu/article/details/6641911 2. http://www.cnblogs.com/zyzlywq/archive/2012/02/23/2364292.html转载于:https://www.cnblogs.com/carlo/p/4584008.html

《TOGAF 9.1IT企业架构》什么是企业IT架构

2. 什么是企业IT架构 现在有越来越多的企业IT架构定义。在这一章&#xff0c;你会学习到一些企业IT架构的方法&#xff0c;我们会给你深入解释一种实用的方法&#xff0c;这种方法视企业架构师为CIO(译注&#xff1a;CIO首席信息官&#xff0c;是负责一个公司信息技术和系统所有…

pdf 深入理解kotlin协程_Kotlin协程实现原理:挂起与恢复

今天我们来聊聊Kotlin的协程Coroutine。如果你还没有接触过协程&#xff0c;推荐你先阅读这篇入门级文章What? 你还不知道Kotlin Coroutine?如果你已经接触过协程&#xff0c;但对协程的原理存在疑惑&#xff0c;那么在阅读本篇文章之前推荐你先阅读下面的文章&#xff0c;这…

编译py-faster-rcnn的问题汇总及解决方法

按照官网 的提示&#xff0c;我开始安装faster rcnn&#xff0c;但是出现了很多问题&#xff0c;我将其汇总了起来&#xff0c;并提出了解决办法。 先说明一下我的配置&#xff1a; python : anaconda2linux: centos 6.9 安装faster rcnn请先参考&#xff1a;《cuda8cudnn4 F…

openWRT自学---针对backfire版本的主要目录和文件的作用的分析整理

特别说明&#xff1a;要编译backfire版本&#xff0c;一定要通过svn下载:svn co svn://svn.openwrt.org/openwrt/branches/backfire&#xff0c;而不能使用http://downloads.openwrt.org/backfire/10.03/中的源码包&#xff1a;backfire_10.03_source.tar.bz2 结合文档《OpenWr…

自然语言交流系统 phxnet团队 创新实训 项目博客 (五)

3DMax方面所涉及的专业知识&#xff1a; &#xff08;1&#xff09;一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的。 &#xff08;2&#xff09;骨骼架设&#xff1a;首先对导入到3DMax中的人物模型进行架设骨骼…

linux 安装python-opencv

三种方法&#xff1a; 1. pip 安装 &#xff1a; pip install opencv-python &#xff0c;最新版为opencv3安装后>>> import cv2 >>> print cv2.__version__参考&#xff1a;http://www.cnblogs.com/lclblack/p/6377710.html 2. anaconda的conda安装 ,可以指…