This answer告诉我,调用TypedArray的 recycle()
方法可以对其进行垃圾回收。我的问题是为什么TypedArray特别需要一种方法来对其进行垃圾回收?为什么不能只等待像常规对象一样进行垃圾收集?
最佳答案
这是缓存对象所必需的。当您调用recycle
时,意味着从此刻起可以重用该对象。内部TypedArray
包含几个数组,因此为了避免每次使用TypedArray
时都分配内存,它会作为静态字段缓存在Resources
类中。您可以查看TypedArray.recycle()
方法代码:
/**
* Give back a previously retrieved StyledAttributes, for later re-use.
*/
public void recycle() {
synchronized (mResources.mTmpValue) {
TypedArray cached = mResources.mCachedStyledAttributes;
if (cached == null || cached.mData.length < mData.length) {
mXml = null;
mResources.mCachedStyledAttributes = this;
}
}
}
因此,当您调用
recycle
时,您的TypedArray
对象只会返回到缓存中。关于android - 为什么要回收TypedArray?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13805502/