我知道在MainActivity
类中使用静态引用会导致内存泄漏,但我必须访问MainActivity
中的对象。
我在MainActivity
类中有一个RecyclerView ViewHolder
对象,我通过从提供的视图中获取上下文并将其转换为MainActivity
来获取现有的MainActivity
实例,这会导致任何问题或内存泄漏吗?
这就是我正在做的事情:
public class songRecyclerVH extends RecyclerView.ViewHolder implements songRecyclerRowView {
TextView artist;
TextView title;
ImageView albumart;
MainActivity mainActivity;
public songRecyclerVH(final View itemView) {
super(itemView);
artist = itemView.findViewById(R.id.artist);
title = itemView.findViewById(R.id.title);
albumart = itemView.findViewById(R.id.albumart);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mainActivity = (MainActivity) view.getContext();
mainActivity.presenter.onSongClicked((Integer.valueOf(title.getTag().toString())));
}
});
}
答案 0 :(得分:4)
代码没问题。当视图从Activity分离时,Context将泄漏内存。
您可以简单地考虑使用接口进行通信并避免内存泄漏。
答案 1 :(得分:0)
更具体地说明您尝试访问的对象。
但一般情况下,请考虑使用Mediator类或接口在Activities和其他视图相关类之间进行通信。或者只是将对象传递给Adapter的构造函数,只要它发生更改,只需调用
即可notifyDataSetChanged();
没有必要经历如此可怕的内存泄漏。
答案 2 :(得分:0)
您可以使用EventBus来避免内存泄漏,而不是使用静态引用。