通过服务保持UI最新

时间:2013-04-12 12:50:09

标签: android android-service android-ui android-networking

我实现了一个IntentService,它从我的服务器获取数据,并通过ResultReceiver将结果作为JSON返回,通过intent为服务提供。

我的问题是保持UI与服务状态保持同步,例如,通过此服务登录我的服务器,如果我想告诉用户该程序正在进行登录,我想要显示一个进度对话框,但是当某人在服务仍在提取数据,用户转动电话或更改活动时进行呼叫时会发生什么?

我不想让用户看着有登录按钮的屏幕,当登录完成时,它只显示表示状态的吐司,我想让用户通知当前状态。

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

目前在我的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最新的常用方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

  • 创建界面
  • 在服务上创建方法,例如setOnSomethingHappenListener(MyInterface listener)
  • 在活动
  • 上实现界面
  • 来自活动电话myService.setOnSomethingHappenListener(this);
  • 来自服务,如果监听器不为null,则从接口调用方法(将这些事件传递给附加到它的任何活动)
  • 不要忘记覆盖onUnbind以使侦听器为空。