android – MVP,在销毁时将演示者的视图设置为null?

我目前正在尝试在 Android上实现MVP模式.但是,我开始考虑内存泄漏(因为演示者持有对活动的引用 – 视图).我的问题是,我应该将演示者的视图设置为null表示活动的onDestroy吗?

这是我的主要活动:

public class MainActivity extends AppCompatActivity implements MainView {
private Button loadUser;
private TextView mTextView;
@Inject
IMainPresenter mPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setUpViews();

    ((MyApp) getApplication()).getAppComponent().inject(this);
    mPresenter.setView(this);
}

private void setUpViews() {
    loadUser = (Button) findViewById(R.id.getUserBtn);
    loadUser.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mPresenter.loadUserName(2);
        }
    });
    mTextView = (TextView) findViewById(R.id.userNameTextView);
}

@Override
public void setUserName(String userName) {
    mTextView.setText(userName);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mPresenter.setView(null);
}
}

解决方法

我总是喜欢这样,我的意思是,我总是在onDestroy()方法上将视图设置为null.我尝试使用 LightCycle库来避免编写所有样板代码.这篇文章解释了Fernando Ceja的 Clean Architecture.这是一个广泛使用的MVP架构(我曾在几家使用这种模式的公司工作过),在那里你可以看到他还在onDestroy()方法中将视图设置为null .如果我能帮助你,请告诉我.

更新:

这个答案有点过时,现在您可以使用Android的Jetpack工具中的LifecycleOwner类.它基本上是相同的交易,但具有不同的API.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...