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/

10-09 09:56