这是我简短的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策略所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)