在另一个 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 来避免内存泄漏,而不是使用静态引用。