2017-08-13 4 views
0

私はサードパーティのAPIを呼び出し、いくつかのパラメータを渡し、結果としてJSONを取得するAsyncTaskを持っています。しかし、実行には時間がかかりすぎることがあります。私はこのAsyncTaskを30秒間だけ実行し、30秒以内に完了しない場合は、AsyncTaskを中止し、残りのコードの実行を続けます。これについていくつかの参考資料/例がありますか?AsyncTaskの実行時間を制限する簡単な方法は何ですか?

+2

[このSOの答え](https://stackoverflow.com/a/31601166/5392118) –

答えて

2

AsyncTaskが30秒以上実行される場合は、CountDownTimerを停止するように設定できます。例については

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) 

もう一つの簡単な方法は、30秒にあなたのHTTP呼び出しの接続タイムアウトを設定することです。 30秒後に自動的に非同期タスクが終了します。

+0

私はメイン/ UIスレッドでコード化できますか? – djac

+0

もちろんできます。実際にはバックグラウンドで実行されます。カウントダウンタイマーの内部にUIコンポーネントを使用しないでください。 –

+0

私の更新された回答を参照してください。また、内部にUIコンポーネントを使用する必要がある場合。ハンドラを使用することができます。 –

関連する問題