[英]Java/Android - How to set timeout external service call with handler
我的場景是一個onCreate()活動方法,該方法執行以下代碼(簡化):
dialog.show(); //loading wheel
try {
remote.sendRequest(myData, new MyHandler());
}
catch (Exception e) {
dialog.dismiss();
//log and react
}
class MyHandler extends SDKSpecificCompiledHandler {
@Override
public void failure() {
dialog.dismiss();
//do stuff
}
@override
public void success() {
dialog.dismiss();
//do stuff
}
}
//I have read-only access to this handler!
public abstract class SDKSpecificCompiledHandler {
public abstract void success(JSONObject successData);
public abstract void failure(JSONObject errorData);
}
說明:一個遠程服務被稱為傳遞處理程序,該處理程序完成后將被調用。 向用戶顯示裝載輪(對話),直到成功,失敗或異常發生。
問題是當服務被成功調用但沒有響應時。 在這種情況下,不會調用dialog.dismiss()
,並且加載輪永遠旋轉。
我需要的是一種超時機制,如果服務器不恢復運行,它將在幾秒鍾后關閉對話框(並可能采取其他措施)。
我的第一個操作是為服務調用創建一個新線程,並在啟動后立即設置一個計時器來關閉對話框。 這是個好主意嗎?
謝謝,
編輯 :
該服務是第三方/不可編輯的。 我正在使用預編譯的工件。
最好在服務調用本身中使用超時,您可以通過服務設置超時,如果您需要知道如何設置超時,那么我應該知道您正在使用哪種服務?
還有一件事是,如果您使用的是加載程序,則應以一種可以被客戶端取消的方式制作該加載程序。
仍然不確定自己要實現什么,但是如果您想在主線程上運行一段時間后再運行一些代碼(即您的代碼將對UI起作用),則可以使用android.os.Handler
mHandler = new Handler(getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// do stuff on UI thread
}
},10000);
從服務器返回呼叫時,只需取消隊列中的消息即可:
mHandler.removeCallbacksAndMessages(null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.