疑惑:自定义控件中 TypedArray对象进行为什么要进行recycle()

原创 2016年06月01日 21:45:29

今天在学习自定义控件的时候,发现在获取自定义的属性使用之后,对TypedArray属性对象进行了回收操作。

们知道在一般Bitmap使用完后要进行回收处理,防止内存泄露。这个TypedArray对象只是存储属性值的变量,那为什

么要回收他呢?


猜测:   1.难道是防止内存泄露?这个对象只是在自定义View中使用,没有在其他的组件中引用!!2.对自己定义的属性进行回收利用,这个属性对象只需要创建一次,由系统来维护。不用每次使用自定义View的时候都创建?

 验证:

这是官方的API的概述,要调用recycle(),在使用了obtainStyledAttributes(...)两个重载方法后。(高度概括)


这是TypedArray类中获取方法,Typed的对象用一个静态方法来获取的,可以看出是从TypedArrayPool中池中获取的。

<pre name="code" class="java">  static TypedArray obtain(Resources res, int len) {
        <span style="color:#ff0000;">final TypedArray attrs = res.mTypedArrayPool.acquire(); </span>
        if (attrs != null) {
            attrs.mLength = len;
            attrs.mRecycled = false;

            final int fullLen = len * AssetManager.STYLE_NUM_ENTRIES;
            if (attrs.mData.length >= fullLen) {
                return attrs;
            }

            attrs.mData = new int[fullLen];
            attrs.mIndices = new int[1 + len];
            return attrs;
        }



结论:正如猜测的一样,使用recycle过后,是将我们之前创建的attrs属性进行回收等待下一次复用,这样,每次引用到我们自定义View的组件重新创建的时候,我们的自定义属性就不会重新的重建,GC就不用频繁的操作这个对象,防止了OOM的出现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【Android】自定义View —— 设置中的选择皮肤项

【关键词】修改皮肤 自定义View【 问题】 让改变皮肤变得简单; 【效果图】【分析】「动态加载皮肤分析」 * 改变背景后将颜色值保存到SharedPreferences中; * 当切换或回退到另...

python 实现:题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

自己写的,是利用列表 仿照报数过程一个一个把人踢出去最后得到结果: count = int(raw_input('Please input the count:')) li = [] for i...

关于自定义控件和属性时TypedArray.getDimension应当注意的问题

二、现象说明 我们看到根据屏幕大小的不同,两行文字中下行文字的大小也随之改变,其中摩托罗拉xt910和中兴 v880下面字体的都比上面字体大,而中兴 n760下面字体与上面字体大小是相同的,而华为c...

自定义控件属性(attr.xml,TypedArray)

在xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,比如:test:attrs="" 呢?答案是肯定的. 好了我就不卖关子了,直接进入主...
  • hudashi
  • hudashi
  • 2011年10月22日 15:20
  • 927

自定义控件5---TypedArray和AttributeSet

API—TypedArray | Android 开发者 API—AttributeSet | Android 开发者1 TypedArray的两种初始化方式:// TypedArray ...

关于自定义控件和属性时TypedArray.getDimension应当注意的问题

关于自定义控件以及自定义属性的文章,可以查看 Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!。本文主要在其基础之上结合实际开发...

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用 .

(转自:http://blog.csdn.net/jincf2011/article/details/6344678) 进入主题。大致以下步骤:   一、 在res/values 文件下定义...

ANDROID 中自定义控件和属性(ATTR.XML,DECLARE-STYLEABLE,TYPEDARRAY)的方法和使用

ANDROID 中自定义控件和属性(ATTR.XML,DECLARE-STYLEABLE,TYPEDARRAY)的方法和使用 本文转载自http://blog.csdn.net/ji...

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三) 查看第三课,这样跟容易方便你的理解! 在xml 文件里定义控件的属性,我们已经习惯了android:a...
  • vrix
  • vrix
  • 2011年08月11日 21:20
  • 1027
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:疑惑:自定义控件中 TypedArray对象进行为什么要进行recycle()
举报原因:
原因补充:

(最多只允许输入30个字)