1

私はasynctaskいくつかのタスクを実行するために使用しています。また、60 秒で完了するように実装したいと考えています。そうしないと、タイムアウトの例外メッセージが表示されます。

だから私はAsyncTask.get(time,timeFormat);

例:

new Thread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    try {
                        validateConnection.execute().get(60, TimeUnit.SECONDS);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (ExecutionException e) {
                        e.printStackTrace();
                    } catch (TimeoutException e) {
                        stopConnTask();
                        invalidCrediantialsError(Utilities.TIMED_OUT_ERROR);
                        e.printStackTrace();
                    }catch(CancellationException e){
                        e.printStackTrace();
                    };
                }
            }).start();

として正常に動作しAsyncTaskます。スレッドでブロックを取得するUIので、個別に実行していthreadます。このアプローチは正しいですか、それとも何か他のことを考えなければなりません。

4

2 に答える 2

1
public final Result get ()

Added in API level 3
Waits if necessary for the computation to complete, and then retrieves its result.

Returns
The computed result.
Throws
CancellationException   If the computation was cancelled.
ExecutionException  If the computation threw an exception.
InterruptedException    If the current thread was interrupted while waiting.

を呼び出しget()ても、asynctask は非同期になりません。get()ui スレッドをブロックする結果を待ちます。get()たとえば、execute を削除して使用しますnew TheTask().execute()

また、UIスレッドでasynctaskを呼び出す必要があります

于 2013-10-10T07:06:13.887 に答える