假设我们有一些Adapter或ViewHolder,它将OnClickListener作为构造函数参数:
public class PassageDateSpecifiedViewHolder extends BasePassageViewHolder<Passage> {
WeakReference<PassageRecyclerAdapter.OnItemClickListener> reference;
public PassageDateSpecifiedViewHolder(View itemView,
PassageRecyclerAdapter.OnItemClickListener listener) {
super(itemView);
this.reference = new WeakReference<>(listener); //will reference live as long as my PassageDateSpecifiedViewHolder class?
}
@Override
protected void onClick(View view, Passage item) {
PassageRecyclerAdapter.OnItemClickListener localListener = reference.get();
if (localListener != null) {
localListener.onItemClick(item);
}
}
}
因此,根据一些指南,我需要针对onClickListeners的WeakReference以避免内存泄漏。这是非常明确的,但是如果我将匿名类传递给我的构造函数或类中,我就无法理解发生了什么,其中创建了onClickListener的实例(或者是侦听器本身)
这意味着没有链接,这个监听器可能会被破坏。告诉我,我错了。
答案 0 :(得分:0)
在将侦听器实现为弱引用之前,您应该通过this问题。
如果我将一个匿名类传递给我的构造函数,我无法理解发生了什么 或者类,其中创建了我的
onClickListener
的实例(或者监听器本身)。
在这种情况下,您的reference.get()
将返回null
。
只要我的PassageDateSpecifiedViewHolder类会引用直播吗?
这不保证。它取决于包含监听器的对象。如果该对象被破坏,您将失去对该侦听器的引用。