2017-08-13 80 views
0

我有調用第三方API並傳遞一些參數,並得到JSON作爲結果的的AsyncTask。但是,有時需要太多時間來執行。假設我想只執行這個AsyncTask 30秒,如果它沒有在30秒內完成,那麼放棄AsyncTask並繼續執行剩下的代碼。你能給一些參考/例子嗎?限制AsyncTask執行時間的簡單方法是什麼?

+2

檢查[這個蘇答案(https://stackoverflow.com/a/31601166/5392118) –

回答

2

您可以設置CountDownTimer停止AsyncTask如果它運行超過30秒。

例如:

new CountDownTimer(30000, 28000) { 

public void onTick(long millisUntilFinished) { 

    } 

    public void onFinish() { 
     asyncTask.cancel(true); // 
     } 
    }.start(); 

另一種方式是處理程序

new Handler().postDelayed(new Runnable(){ 
    @Override 
    public void run() { 
     asyncTask.cancel(true); 
     } 
    },30000) 

另一種簡單的方法是設置連接超時您的HTTP調用到30秒。它會在30秒後自動結束異步任務。

+0

我可以在主/ UI線程代碼呢? – djac

+0

當然可以。它實際上在後臺運行。不要在倒數計時器內使用UI組件。 –

+0

查看我更新的答案。如果您還需要在其中使用UI組件。您可以使用處理程序。 –

相關問題