使用#recycle()后应该回收Typed Array。

15

我的代码出现了以下警告信息:

使用完毕的Typed Array应该使用#recycle()进行回收,对于obtainedTypedArray

代码:

public View getView(int i, View view, ViewGroup viewgroup)
{
    ImageView imageview;
    if (view == null)
    {
        imageview = new ImageView(b);
        imageview.setLayoutParams(new android.widget.AbsListView.LayoutParams(110, 110));
        imageview.setPadding(1, 1, 1, 1);
        imageview.setAdjustViewBounds(false);
        imageview.setScaleType(android.widget.ImageView.ScaleType.CENTER_CROP);
    } else
    {
        imageview = (ImageView)view;
    }
    imageview.setImageResource(a.getResources().obtainTypedArray(0x7f050000).getResourceId(i, -1)); //*warning*Typed Array should be recycled after use with #recycle()
    return imageview;
}

是的。事实上,你应该回收你的 typed array,而不是 activity。在我的评论中,我说过 **ta.recycle();**,而不是 **this.recycle();**。这不是打字错误。"ta" 代表 "typed array",也就是在使用 imageview.setImageResource 前应该创建的那个数组。 - Phantômaxx
那么你是告诉我在 return 语句之前放置 imageview.recycle(); 吗? - Mojo Jojo
ta.recycle(); 想象一下你设置了TypedArray ta = ...,然后使用它,然后回收它。 - Phantômaxx
这意味着我需要输入“Typed Array dot recycle”,也就是obtainTypedArray.recycle();吗? - Mojo Jojo
请查看参考网站 - Phantômaxx
显示剩余3条评论
2个回答

18

obtainTypedArray()返回的TypedArray需保留并在使用后调用recycle()

另外,硬编码十六进制值(如0x7f050000)可能不是正确的答案。


@MojoJojo,你不应该硬编码它。使用名称,例如R.id.foo - dsh

14
在您的obtainTypedArray()语句末尾使用recycle();。 不要使用hex值,以免将来引起代码复杂性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接