2012-12-26 3 views
11

私のAsyncTaskの結果にアクティビティの変数を設定しようとしています。私は変数を返すことができないこと、そして自分のアクティビティで変数を設定してからonPostExecuteメソッドで変数を変更する必要があることを読んだことがあります。ASyncTaskが終了するのを待つか、変数を設定する

私の問題は、AsyncTaskの終了後にその変数を使用する必要があることです。私はこれまで問題を抱えています。これまでに試したすべてのソリューションがUIをフリーズさせてから応答しなくなるからです。

私がこれまで試してみました:

while (!task.isCancelled()) { 
    // Wait... 
} 

そして

while (variable == null) { 
    // Wait ... 
} 

は私が私の活動にAsyncTaskから変数を渡すための最良の方法をやっているとは何ですか?そうであれば、UIをロックせずに、アクティビティでタスクが終了するのをどのように待つことができますか?

+10

あなたは 'AsyncTask'を待つべきではありません。おそらく、 'onPostExecute()'の中に何かをする必要があります。 – Eric

+1

'onPostExecute()'メソッドでは、自分のアクティビティの変数を結果に変更します。私がしようとしているのは、変数が変更されるまで待つことです。 – Dan

+0

正確には - これをしないでください。 'AsyncTask'の' onPostExecute() '自体は、タスクが完了した後に発生させたい一連のイベントを開始する必要があります。他のコードはそのタスクに頼るべきではありません。 – Eric

答えて

13

変数が関数内で変更された後に実行したいコードを入れ、この関数をonPostExecuteから呼び出します。

+1

これはクリーンなコーディングではありません! –

37

AsyncTaskの結果に依存している場合は、これを行うことができます。

Object result = asyncTask.execute().get(); 

結果の型は、doInBackground()メソッドの戻り値の型です。しかし、あなたのメインスレッドは、タスクが完了するまで待っています。

+0

ありがとう!それはまさに私が探していたものです。 – PeteH

+4

しかし、そうすると、メインスレッドをブロックします。それはお勧めできません。 – adalPaRi

+0

adalPaRi、それはスプラッシュ画面ですか? –

関連する問題