Android MVP:处理presenter类中的所有异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android MVP:处理presenter类中的所有异常相关的知识,希望对你有一定的参考价值。

我正在以MVP架构实现android应用程序。

我保留了要在演示者内部查看的参考,并执行了耗时的任务,例如从模型内部的网络进行加载。

我的问题是,在演示者内部要调用View方法的每次调用中,都可能发生视图已被销毁并且在presenter内部将其引用设置为null的情况。

因此,当我收到模型的结果时,在像mView.updateUISomehow()之类的每个调用之前都需要添加if (mView!=null),因为当控制权到达这一点时,mView可能为null。

我想知道是否有任何方法可以跳过所有空检查并在类范围的异常处理程序中处理presenter类的所有可能的异常。

P.S。我了解MVVM,LiveData和Room。我想解决这个确切的问题:)

答案
BasePresenter<View>
  View view

  updateUI()
   if(view != null)
      callUI()
  

  abstract callUI();

您的控制器将了解updateUI(),您可以选择如何处理

YourPresenter<ThatElusiveview> extends BasePresenter<ThatElusiveEview>


  callUI()
   // hoping this is not directly called from the controller!!
   

当我使用MVP进行太多UI更新调用时遇到了相同的问题,这在实际情况下会发生。对Jet pack的重构很好。我了解您的困境。我认为,如果为Presenter提供供查看器使用的侦听器是可行的,所以如果视图被破坏,Presenter将保持从控制器到View的通信。

听起来确实像检查视图!= null,但是您可以拥有从演示者到视图的不同类型更新的枚举。您可以将其放在一个地方进行检查,然后根据枚举操作的类型将它们定向到相应的更新方法。这也将有助于阅读有关演示者能够发送给View的不同操作的代码]

以上是关于Android MVP:处理presenter类中的所有异常的主要内容,如果未能解决你的问题,请参考以下文章

Android应用中MVP开发模式

android MVP模式初认识-1

android-samples-mvp

Android设计模式——MVP

Android进阶之路-详解MVP

Android MVP架构模式