1

私の場合、ネットワークからデータを取得して処理し、最初のネットワーククエリの結果に基づいてネットワークから他のデータを取得する必要があります。ただし、最初のクエリでは、ユーザーの介入が必要になる可能性があります...またはそうではありません。

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

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

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

それとも私はここで何も気にしないのですか?


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

4

3 に答える 3

1

ネットワークリクエストにバックグラウンドサービスを使用して、それに応じてUIを更新する必要があると思います。ネットワーク操作にインテントサービスを使用し、アクティビティの更新をブロードキャストしてUIを更新できます。それが役に立てば幸い。

編集:また、リクエストのキャンセルについては、サービスを実装し、アクティビティでbindService()を使用してサービスにアタッチする方が良いと思います。そうすれば、キャンセル要求があった場合に、サービスが実行していることをすべて停止するようにサービスに通知できます。

于 2012-04-23T15:55:16.443 に答える
0

UIベースのアクションはワークフローをブロックしてはいけません(!)。おそらく、ブロックsthの代わりに、ViewSwitchersまたはBackgroundServicesを使用してUIを最近更新する必要があります。

于 2012-04-23T15:57:35.203 に答える
0

これを行うための最良の方法は、かなりの量の検索を行った後、メッセージハンドラーを使用することです。これは、スレッドアクションの最後に、結果を含むメッセージをUIコード(UIウィジェットのメモではない)に投稿し、正常に終了できることを意味します。

これは、軽量でシンプルな実装を意味します。

于 2012-04-30T12:12:14.557 に答える