Suppose we have some Adapter or ViewHolder which takes an OnClickListener as a constructor parameter:
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);
}
}
}
So, according to some guides, I need to WeakReference for onClickListeners in order to avoid memory leaks. This is acually clear, but I can't understand what happend if I pass an anonymous class into my constructor, or class, where the instance of my onClickListener is created(or listener itself) was destroyed.
This means that there are no links and this listener can be destoryed. Tell me, where I'm wrong.