为什么需要在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


作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/p/4049982.html

目录
相关文章
|
6月前
layer.open 关闭回调
layer.open 关闭回调
|
JSON 数据格式
Buffer 对象
Buffer 对象
|
Java C++
Java中对象为null和调用对象清除方法clear()的不同
Java中对象为null和调用对象清除方法clear()的不同
475 0
|
.NET Java C#
一起谈.NET技术,C#资源释放及Dispose、Close和析构方法
  在开始本文前,需要一些准备知识。首先要提出“什么是资源”。在CLR出来之后,Windows系统资源开始分为“非托管资源”和“托管资源”。非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理;托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象。
1154 0
|
.NET Java C#
C#资源释放及Dispose、“.NET研究”Close和析构方法
  在开始本文前,需要一些准备知识。首先要提出“什么是资源”。在CLR出来之后,Windows系统资源开始分为“非托管资源”和“托管资源&rdq上海网站建设uo;。非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理;托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象。
850 0
|
安全 内存技术 调度