0

我已经实现了一个 IntentService,它从我的服务器获取数据并通过 ResultReceiver 以 JSON 形式返回结果,ResultReceiver 通过 Intent 提供给服务。

我的问题是让 UI 与服务状态保持同步,例如通过此服务登录到我的服务器,如果我想告诉用户程序正在登录我想显示一个进度对话框,但是当服务仍在获取数据、用户轮换手机或更改活动时有人打电话时会发生什么?

我不想让用户看着有登录按钮的屏幕,登录完成后它只显示表示状态的 toast,我想让用户了解当前状态。

在访问我的服务时,如何在不创建数百行重复代码的情况下处理进度对话框?

目前在我的 LoginActivity 上,用户想要登录后它调用我的 ApiAccessor 中的登录函数,该函数处理与服务的通信并在结果以这种方式返回时注册回调:

ProgressDialog dialog;


dialog = ProgressDialog.show(this, "Please wait..", "Logging in..");
accessor.login(usernameField.getText().toString(), passwordField.getText().toString(), new ApiCallback() {

        @Override
        public void onResponse(ApiResponse response) {
            dialog.dismiss();
        }
    });

但现在我必须在 onPause、onResume 和 onDestroy 中处理解除和重生对话框,而且我必须在每个活动中都这样做!

使 UI 与服务状态保持同步的常用方法是什么?

4

1 回答 1

1

您需要阅读整个服务指南和文档的 BIND 部分。

http://developer.android.com/guide/components/bound-services.html

活动绑定到服务后,活动可以调用其上的任何方法,因此您可以:

  • 创建接口
  • 在服务上创建方法,例如setOnSomethingHappenListener(MyInterface listener)
  • 在活动上实现接口
  • 从活动电话myService.setOnSomethingHappenListener(this);
  • 从服务中,如果侦听器不为空,则从接口调用方法(将这些事件传递给附加到它的任何活动)
  • 不要忘记onUnbind将侦听器覆盖为空。
于 2013-04-12T13:28:27.397 回答