Android MVP策略

前端之家收集整理的这篇文章主要介绍了Android MVP策略前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将我的应用程序迁移到MVP.已经从这个 konmik获取了静态演示者模式的提示

这是我简短的MVP策略.为简洁起见,删除了大部分样板和MVP监听器.这个策略帮助我定位变更证明我的后台流程.与完成活动的暂停相比,活动正常恢复正常暂停.此外,Presenter只有应用程序上下文,因此它不会保留活动上下文.

我不是一名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
    }

}

解决方法

我会建议两件事.

>将模型,视图和演示者制作成接口.

>您的MVP视图(活动,片段或视图)应该非常简单,不需要进行测试.
>您的MVP-Presenter永远不会直接与Activity / Fragment / View交互,因此可以使用JUnit进行测试.如果您对Android Framework有依赖性,那么测试是不好的,因为您需要模拟Android对象,使用模拟器,或使用像Roboelectric这样的测试框架,这可能非常慢.

作为接口的示例:

interface MVPView {
    void setText(String str);
}

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

MVPPresenter类现在不依赖于Android Framework:

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!");
    }
}

>而不是让Presenter成为一个静态类,我会把它变成一个保留片段.需要仔细跟踪静态对象,并在不需要时手动删除GC(否则会被视为内存泄漏).通过使用保留片段,可以更容易地控制演示者的生命周期.当拥有保留片段的片段完成时,保留片段也被破坏,内存可以被GC’d. See here for an example.

猜你在找的Android相关文章