在TypedArray中使用recycle()方法有什么用处

Pra*_*mod 40 android

我创建了一个GalleryView和ImageView,当在图库中单击某个项目时,它会显示更大的图像.我使用下面的代码来实现ImageAdapter:

public ImageAdapter(Context c)
{
    context = c;
    TypedArray a = obtainStyledAttributes(R.styleable.gallery1);
    itemBackground = a.getResourceId(R.styleable.gallery1_android_galleryItemBackground, 0);    
    a.recycle();    
}
Run Code Online (Sandbox Code Playgroud)

当我删除语句GalleryView时没有变化,应用程序像以前一样正常运行,但我读到的每个地方都必须回收typedArray.当我的应用程序运行方式没有变化时,该方法的用途是什么ImageView.

任何人都可以详细解释我.谢谢.

Vin*_*nay 37

这一点类似于用C语言清除指针的想法(如果你熟悉它).它用于使与"a"相关联的数据准备好进行垃圾收集,因此当不需要时,内存/数据不会低效地绑定到"a".在这里阅读更多.重要的是要注意,除非你真的重用"a",否则这不是必需的.如果不再使用该对象,GC应自动清除此数据.但是,TypedArray不同的原因是因为TypedArray必须将其他内部数据(称为StyledAttributes)返回到TypedArray以供以后重用.在这里阅读.

  • 我不明白.最后一个链接使得看起来像调用recycle()允许重用一些内部数组.这是不是意味着它阻止了数组的GC?为什么你说它使与"a"相关的数据为GC准备好了? (3认同)
  • 附注:GC代表"垃圾收集". (2认同)

Ron*_*nie 6

recycle()原因已分配的内存返回到立即可用池,不会留到垃圾回收.此方法也可用Bitmap.