android-在ViewHolder中引用活动

android-在ViewHolder中引用活动,第1张

概述在使用setTag方法存储的ViewHolder中保留Activity的句柄是否安全?我发现此问题声称存储对活动引用可能会导致内存泄漏,但已在Android4.0中修复:https://code.google.com/p/android/issues/detail?id=18273具体来说,我想知道拥有这样的ViewHolder是否安全:classMyHolder{pr

在使用setTag方法存储的VIEwHolder中保留Activity的句柄是否安全?

我发现此问题声称存储对活动的引用可能会导致内存泄漏,但已在Android 4.0中修复:https://code.google.com/p/android/issues/detail?id=18273

具体来说,我想知道拥有这样的VIEwHolder是否安全:

class MyHolder {  private Context context; // <<-- is this safe to keep here??  private TextVIEw textVIEw;  public MyHolder(Context context) {    this.context = context;  }  public voID populate(Doc doc) {    textVIEw.setText(context.getString(doc.getTextID()));  }  public VIEw inflate(VIEwGroup parent) {    VIEw vIEw = LayoutInflater.from(parent.getContext()).inflate(        R.layout.doc_item, parent, false);    textVIEw = (TextVIEw)vIEw.findVIEwByID(R.ID.doc_item_text);    return vIEw;  }}

在我的ArrayAdapter中使用getVIEw方法,如下所示:

@OverrIDepublic VIEw getVIEw(int position, VIEw row, VIEwGroup parent) {    Doc doc = getItem(position);    MyHolder holder;    if (row != null) {        holder = (MyHolder) row.getTag();    } else {        holder = new MyHolder(getContext());        row = holder.inflate(parent);        row.setTag(holder);    }    holder.populate(doc);    return row;}

(该代码是实际代码库的简化版本,目的只是为了说明这一点.)

我见过的示例代码都没有在持有者中存储对视图的引用.我想知道这是巧合还是设计使然.

解决方法:

无论在这种情况下是否安全,始终最好将Context引用保持在最低水平.使用Adapter中保存的Context引用,可以将在MyHolder中使用上下文进行的所有 *** 作都转换为在getVIEw()中执行的 *** 作.这将是设计使然,因为肯定不需要设计所需要的多个Context引用.

总结

以上是内存溢出为你收集整理的android-在ViewHolder中引用活动全部内容,希望文章能够帮你解决android-在ViewHolder中引用活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1088341.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存