我已經實現了一個IntentService,它從我的服務器獲取數據,並通過ResultReceiver將結果作爲JSON返回,並通過intent向服務提供。保持UI與服務的最新狀態
我的問題是保持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保持與服務狀態等更新的常用方法是什麼?
這並沒有真正改變現狀,對嗎?爲了處理正確顯示進度對話框,我仍然必須丟失重複代碼?這可能會使事情變得更加複雜,因爲IntentService已經爲我做了很多工作,而不是它應該只執行一項任務並返回? – Ruuhkis
'什麼是使UI保持與服務狀態等更新的常見方式?這是活頁夾,服務將只是一個(沒有重複),活動只是綁定到運行服務(可能不應該是IntentService ,將不得不分析更多細節)。關於在所有活動中實現它,您可以使偵聽器成爲與活動不同的對象,但是可以用它初始化。你可以做一個抽象的基本活動來完成代碼並讓其他的擴展它。有辦法!但是它需要對整個系統進行適當的分析,以確定採用哪種方式。 – Budius
謝謝,我對服務綁定的心態有問題,解決了我的問題。 :) – Ruuhkis