为什么需要在TypedArray后调用recycle

当我们没有在使用TypedArray后调用recycle,编译器会提示“This TypedArray should be recycled after use with #recycle()”。

官方的解释是:回收TypedArray,以便后面重用。在调用这个函数后,你就不能再使用这个TypedArray。

在TypedArray后调用recycle主要是为了缓存。当recycle被调用后,这就说明这个对象从现在可以被重用了。TypedArray 内部持有部分数组,它们缓存在Resources类中的静态字段中,这样就不用每次使用前都需要分配内存。你可以看看TypedArray.recycle()中的代码:

 1 /**
 2  * Give back a previously retrieved StyledAttributes, for later re-use.
 3  */
 4 public void recycle() {
 5     synchronized (mResources.mTmpValue) {
 6         TypedArray cached = mResources.mCachedStyledAttributes;
 7         if (cached == null || cached.mData.length < mData.length) {
 8             mXml = null;
 9             mResources.mCachedStyledAttributes = this;
10         }
11     }
12 }

参考链接

http://stackoverflow.com/questions/13805502/why-do-you-have-to-recycle-a-typedarray

http://developer.android.com/reference/android/content/res/TypedArray.html#recycle%28%29

时间: 2024-10-11 07:44:54

为什么需要在TypedArray后调用recycle的相关文章

webservice发布问题,部署iis后调用不成功

我使用的环境win8.vs2010.IIS8.0 vs2010中创建的webservice中的方法可以正常调用,但是发布到IIS上后,asmx文件能正常访问, 但是进入方法后, 点击 "调用" 时就出现了问题.  无法返回正确的调用结果. 解决方法:对应的应用池,设置高级设置-->进程模型-->标识-->设置localsystem 设置后就可以了,本方法只供参考,我的问题是解决了,不知道还有没有其他问题.

webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲解SpringMVC+CXF环境下,怎么调用其他系统通过webService方式暴露出来的接口 ① 为避免怀疑同一个项目中调用本项目的接口,这里我新打开一个eclipse通过最原始的方式发布了一个webservice并启动保证可以被访问 打开浏览器确认可以被访问 ②进入CXF/bin 利用wsdl2

文件存到aws的S3后, 调用getimagesize失败分析

一.问题 将图片在windows下用图片查看器修改后,上传到s3中,调用getimagesize获取图片信息总是返回false,其它图片正常: 代码如下: $fileName = 's3://sdk1/20150317/174290_1_1428371.JPG'; $size = getimagesize($fileName);var_dump($size); 以上代码总是输出false. 即部分图片调用成功,部分调用失败: 图片上传后,可以对上传的临时文件调用getimagesize获取图片信

Invoke-InvokeRepeating/短暂延迟后调用一次 或重复调用携程之外

 首先,新建一个场景,在场景中创建一个Cube对象.新建一个名称为TestInvoke的脚本文件,并添加到Cube游戏物体上. 首先,新建一个场景,在场景中创建一个Cube对象.新建一个名称为TestInvoke的脚本文件,并添加到Cube游戏物体上.   打开脚本.在Update函数里面,我们演示Invoke的两种调用方法. 1.Invoke(函数名称字符串,几秒种后执行); 这种调用方法只会执行一次. 2.InvokeRepeating(函数名称字符串,几秒钟后开始,间隔秒数);这种调用方法

WinServer 之 发布WebService后调用出现&quot; The test form is only available for requests from the local machine. &quot;

当您尝试从远程计算机访问 Web 服务时,不会显示“调用”按钮.并且,您会收到以下错误信息: The test form is only available for requests from the local machine 解决方法: 1.通过编辑 Web 服务所在的 vroot 的 Web.config 文件,可以启用 HTTP GET 和 HTTP POST.以下配置同时启用了 HTTP GET 和 HTTP POST: <configuration> <system.web&

NT_iOS笔记—iOS用户添加字体后调用

iOS需要用到新字体,直接添加就行了,之前写过iOS 添加字体 但是当字体文件太多.太大.或者没有用户喜欢的字体怎么办? 让用户手动的下载字体或者导入字体. 那我们怎么调用这些字体呢? 可以通过这个方法找到所有字体 NSArray *familyNames =[[NSArray alloc]initWithArray:[UIFont familyNames]]; NSArray *fontNames; NSInteger indFamily, indFont; for(indFamily=0;i

UpdatePanel完成后调用js

引言: asp.net 2008 微软引入了UpdatePanel 使用起来很方便 如果 我们想UpdatePanel加载完成后做一些事情 需要使用js <script type="text/javascript"> //给ScriptManager的实例 添加加载成功后需要执行的js方法 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(onPageLoaded); //下面的方法 就是您自己的代码

javascript动态创建script标签,加载完成后调用回调

代码如下: var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.charset = 'GBK'; script.onload = script.onreadystatechange = function() { if (!this.readyState || this.r

通过工厂模式批量创建对象后调用其中方法 出现XXXis not a function()问题原因

//通过工厂模式批量创建 function Computer(color,weight,logo){ var obj=new Object(); obj.color=color; obj.weight=weight; obj.logo=logo; obj.play=function(){ console.log(obj.color+obj.weight); }; return obj;            //切记一定要有返回值,返回一个对象 } 如上,我们已经创建了一个构造函数用于生成我们的