gpt4 book ai didi

安卓 MVP 策略

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:37:06 29 4
gpt4 key购买 nike

我正在将我的应用程序迁移到 MVP。从这个 konmik 中获得了有关静态演示者模式的提示

这是我的简要 MVP 策略。为简洁起见,删除了大部分样板和 MVP 监听器。这个策略帮助我改变了方向,证明了我的后台进程。与结束 Activity 的暂停相比, Activity 从正常暂停中正确恢复。此外,Presenter 只有应用程序上下文,因此它不会保留 Activity 上下文。

我不是 Java 专家,这是我第一次涉足 MVP,使用静态演示器让我感到不舒服。我错过了什么吗?我的应用运行良好,响应速度更快。

查看

public class MainActivity extends Activity{
private static Presenter presenter;

protected void onResume() {
if (presenter == null)
presenter = new Presenter(this.getApplicationContext());
presenter.onSetView(this);
presenter.onResume();
}

protected void onPause() {
presenter.onSetView(null);
if(isFinishing())presenter.onPause();
}
}

主持人

public class Presenter {
private MainActivity view;
Context context;
public Model model;

public Presenter(Context context) {
this.context = context;
model = new Model(context);
}

public void onSetView(MainActivity view) {
this.view = view;
}

public void onResume(){
model.resume();
}
public void onPause(){
model.pause();
}

}

模型

public class Model {

public Model(Context context){
this.context = context;
}
public void resume(){
//start data acquisition HandlerThreads
}
public void pause(){
//stop HandlerThreads
}

}

最佳答案

我有两点建议。

  1. ModelViewPresenter 制作成界面。
    • 您的 MVP-View(ActivityFragmentView)应该简单到不需要测试。
    • 您的 MVP-Presenter 从不直接与 Activity/Fragment/View 交互,因此可以使用 JUnit 对其进行测试。如果您对 Android 框架有依赖性,则不利于测试,因为您需要模拟 Android 对象、使用模拟器或使用像 Roboelectric 这样的测试框架,这可能会非常慢。

作为接口(interface)的例子:

interface MVPView {
void setText(String str);
}

interface MVPPresenter {
void onButtonClicked();
void onBind(MVPView view);
void onUnbind();
}

MVPPresenter 类现在不依赖于 Android 框架:

class MyPresenter implements MVPPresenter{
MVPView view;

@Override void bind(MVPView view){ this.view = view; }
@Override void unbind() {this.view = null; }
@Override void onButtonClicked(){
view.setText("Button is Clicked!");
}
}
  1. 我不会将 Presenter 设为静态类,而是将其设为 Retained Fragment。需要仔细跟踪静态对象,并在不需要时手动将其删除以供 GC 使用(否则将被视为内存泄漏)。通过使用保留 fragment ,可以更轻松地控制呈现器的生命周期。当拥有保留 fragment 的 fragment 完成时,保留 fragment 也被销毁并且内存可以被GC'。 See here for an example .

关于安卓 MVP 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32031724/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com