我已经实现了一个 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 与服务状态保持同步的常用方法是什么?