我目前正在尝试在
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.