2012-04-23 6 views
1

私の場合、ネットワークからデータを取得し、処理し、最初のネットワーククエリの結果に基づいてネットワークから他のデータを取得する必要があります。 しかし、最初のクエリはユーザーの介入の必要性を生む可能性があります。UIを更新しない多くのステップの1つとしてAsyncTask

私はAsyncTaskを実行する方法を理解し、その結果をUIオブジェクトに表示します。 しかし、新しいアクションを開始する前に、最初のAsyncTask派生オブジェクトが正しく終了するように、アクションを一緒に「チェーン化」する必要があります。

私は、onPostExecuteを呼び出すと、別のUIベースのアクションを開始すると、UIベースのアクションが終了するまで終了しないと考えました。

AsyncTaskプロセスを終了し、呼び出し元のオブジェクトに結果を通知し、クリーンアップし、オブジェクトを呼び出すことで独自の処理を行う方法はありますか?

ここで何も騒がしいですか?


EDIT:私の質問は、AsyncTaskのバックグラウンド処理とどのように正しく実行スタックオーバーフローを避けるためにそれを使用しようとしているのでご注意ください。私はこの方法を使うべきかどうか尋ねていません。

答えて

0

これを行う最善の方法は、検索の量を増やした後、メッセージハンドラを使用することです。 これは、スレッドアクションの終了時に、結果を含むメッセージをUIコード(UIウィジェットノートではなく)にポストしてから、きれいに終了できることを意味します。

これは、軽く簡単な実装を意味します。

1

あなたのネットワーク要求にバックグラウンドサービスを使用し、それに応じてUIを更新するようにしてください。ネットワーク操作にインテントサービスを使用し、アクティビティの更新をブロードキャストしてUIをリフレッシュすることができます。それが役に立てば幸い。

EDIT:また、リクエストを取り消すことについては、私はサービスでbindService()を使ってサービスを実装して接続する方が良いと思います。そうすれば、取り消し要求があった場合、サービスが何をしているのかを停止するよう通知することができます。

0

UIベースのアクションではワークフローをブロックしないでください。sthをブロックする代わりに、ViewSwitchersまたはBackgroundServicesを使用して最近UIを更新する必要があります。