在另一个类中有一个MainActivity对象会导致内存泄漏吗?

时间:2017-11-06 07:12:56

标签: java android performance memory-leaks mvp

我知道在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())));
        }
    });
}

3 个答案:

答案 0 :(得分:4)

代码没问题。当视图从Activity分离时,Context将泄漏内存。

您可以简单地考虑使用接口进行通信并避免内存泄漏。

答案 1 :(得分:0)

更具体地说明您尝试访问的对象。

但一般情况下,请考虑使用Mediator类或接口在Activities和其他视图相关类之间进行通信。或者只是将对象传递给Adapter的构造函数,只要它发生更改,只需调用

即可
notifyDataSetChanged();

没有必要经历如此可怕的内存泄漏。

答案 2 :(得分:0)

您可以使用EventBus来避免内存泄漏,而不是使用静态引用。