如何更新应用在后台时收到的回调用户界面?

时间:2017-02-13 17:01:41

标签: java android reflection mvp

我正在使用MVP架构创建一个Android应用程序。我创建了Presenter和Interactor类。当app处于后台并回到前台时,我正在努力更新UI。

让我们考虑以下情景。

单击UI上的按钮,并向演示者通知它。 Presenter要求Interactor提供后端数据。当Interactor以某种方式向演示者提供结果时,UI处于后台。一旦应用处于前台,我该如何保存它的状态并更改UI组件。

我尝试过以下事情:

  1. 使用标志(打开标志并检入onResume以调用收到回调时应该调用的方法。但问题是,如果我有5种不同的服务可以被演示者调用,那么问题是有不同的回调然后我将需要5个标志,我不喜欢它)
  2. 使用JAVA反射(使用参数存储方法名称在HashMap中调用)
  3. 有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以向演示者添加一些“暂停”逻辑:

  • 每当用户界面进入后台时,您都会告诉演示者“暂停”并将收到的所有数据保存到缓存中(可能就像演示者中的列表一样简单)。
  • 每当UI返回前台时,您都会告诉您的演示者取消暂停并将其缓存卸载到UI(如果缓存列表不为null,则将其推送到UI,就像您的交互器收到的常规响应一样)

答案 1 :(得分:0)

名称MVP建议模型视图演示者 模型:Model负责getter setter方法,也称为POJO。 视图:包含带有视图的活动/片段。 演示者:实际业务逻辑,您可以在其中传递网络呼叫或与后端数据库(如SQLite / MySql)相关联。

当按钮单击时,您需要调用演示者,该演示者将在完成后台任务后执行后台任务,您需要通过CallBacks通知您的视图响应是成功/失败,这是通过接口完成的。

示例:

interface BaseContract {
        interface BaseView {
            //Methods for View
            void onDoSomething();
        }

        interface BasePresenter {
            void doSomething();

        }
    }

    class BaseMainPresenter implements BaseContract.BasePresenter {
        BaseContract.BaseView view;

        BaseMainPresenter(BaseContract.BaseView view) {
            this.view = view;
        }

        @Override
        public void doSomething() {
            if (view != null)
                view.onDoSomething();
        }
    }

    class DemoClass implements BaseContract.BaseView {

        //Create object of Presenter 

        /****
         * Example :
         * BaseMainPresenter baseMainPresenter = new BaseMainPresenter(this);
         */
        @Override
        public void onDoSomething() {
            //Deal with Context here.
        }
    }