簡體   English   中英

Java / Android-如何使用處理程序設置超時外部服務調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM