Android MVP策略

Android MVP策略,第1张

概述我正在将我的应用程序迁移到MVP.已经从这个 konmik中获取了静态演示者模式的提示 这是我简短的MVP策略.为简洁起见,删除了大部分样板和MVP监听器.这个策略帮助我定位变更证明我的后台流程.与完成活动的暂停相比,活动正常恢复正常暂停.此外,Presenter只有应用程序上下文,因此它不会保留活动上下文. 我不是一名java专家,这是我第一次涉足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 MVP策略全部内容,希望文章能够帮你解决Android MVP策略所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1130775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存