在另一个 class 中拥有 MainActivity 对象会导致内存泄漏吗?
Will having an object of MainActivity in another class cause a memory leak?
我知道 MainActivity
class 中的静态引用会导致内存泄漏,但我必须访问 MainActivity
.
中的对象
我在 RecyclerView ViewHolder
class 中有一个 MainActivity
对象,我通过从提供的视图获取上下文并将其转换为 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())));
}
});
}
代码没问题。当视图从 Activity 分离时,上下文将泄漏内存。
可以简单的考虑使用接口通信,避免内存泄露
更具体地说明您尝试访问的对象。
但一般来说,请考虑使用调解器 class 或在活动和其他视图相关 class 之间进行通信的接口。或者只是将对象传递给适配器的构造函数,只要它发生变化就调用
notifyDataSetChanged();
没有必要经历如此可怕的内存泄漏。
您可以使用 EventBus 来避免内存泄漏,而不是使用静态引用。
我知道 MainActivity
class 中的静态引用会导致内存泄漏,但我必须访问 MainActivity
.
我在 RecyclerView ViewHolder
class 中有一个 MainActivity
对象,我通过从提供的视图获取上下文并将其转换为 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())));
}
});
}
代码没问题。当视图从 Activity 分离时,上下文将泄漏内存。
可以简单的考虑使用接口通信,避免内存泄露
更具体地说明您尝试访问的对象。
但一般来说,请考虑使用调解器 class 或在活动和其他视图相关 class 之间进行通信的接口。或者只是将对象传递给适配器的构造函数,只要它发生变化就调用
notifyDataSetChanged();
没有必要经历如此可怕的内存泄漏。
您可以使用 EventBus 来避免内存泄漏,而不是使用静态引用。