疑惑:自定义控件中 TypedArray对象进行为什么要进行recycle()
来源:互联网 发布:1099端口占用 编辑:程序博客网 时间:2024/06/05 15:17
今天在学习自定义控件的时候,发现在获取自定义的属性使用之后,对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的出现。
2 0
- 疑惑:自定义控件中 TypedArray对象进行为什么要进行recycle()
- TypedArray 为什么需要调用recycle()
- 解析:TypedArray 为什么需要调用recycle()
- 为什么需要在TypedArray后调用recycle
- 为什么需要在TypedArray后调用recycle
- 为什么需要在TypedArray后调用recycle
- 解析:TypedArray 为什么需要调用recycle()
- Android之TypedArray 为什么需要调用recycle()
- 解析:TypedArray 为什么需要调用recycle()
- Android之TypedArray 为什么需要调用recycle()
- 解析:TypedArray 为什么需要调用recycle()
- 为什么需要在TypedArray后调用recycle
- This TypedArray should be recycled after use with #recycle()为什么需要在TypedArray后调用recycle
- (4.1.36.2) 解析:TypedArray 为什么需要调用recycle()
- 自定义view控件 TypedArray
- Android 性能优化——TypedArray 调用recycle()回收对象
- 《C#中自定义控件并在Form中进行调用》
- 为什么要对ListView控件进行优化,以及如何优化。
- 手机开发实战60——语音信箱介绍2
- Android Service实现闹钟
- 剑指offer-27二叉搜索树与双向链表
- 网络图片+修改导航样式
- 真假泰版球衣知识
- 疑惑:自定义控件中 TypedArray对象进行为什么要进行recycle()
- VACUUM PostgreSQL 手册
- textFied随着键盘移动
- java-maven
- VMware ESXi自动化部署实践
- leetcode笔记—关于买股票
- 两款Python工具推荐
- 2015-360web一面js试题自我解答
- NSURLSession