6

それで、私はバーコードデコーダーに取り組んでいます。バーコードが取得されると、インターネット経由でマルチプルAPIに送られ、スキャンされたものをデコードします。問題は、いくつかのXML解析をリンクする必要があるということですが、それが正しく行われているかどうかはわかりません。

したがって、バーコードがスキャンされると、私のプログラムはAPIを介して製品名を取得するASyncTaskを呼び出します。名前が付けられたら、別のASyncTaskを呼び出します。これは、他のASyncTaksをインスタンス化することで可能になることはわかっていますonPostExecute()が、これは間違っていると思います。これは、ボックス内のボックスのようなものだからです。では、メインのアクティビティ内で2番目のASyncTaskをインスタンス化し、最初のASyncTaskが終了するまで待機させることは可能/より良いことではありませんか?

(英語は私の第一言語ではありません、私は自分自身を明確にしたいと思います)。

4

3 に答える 3

17

最初のAsyncTaskの2番目を開始することは絶対に合法だと思います。両方の操作を混合することは論理的に悪いAsyncTask考えですonPostExecute

それ自体の内部に直接配置したくない場合onPostExecuteは、アクティビティで実行するようにハンドラーを設定し、からこのハンドラーを呼び出しますonPostExecute

そして最後に、ロジックがたくさんある場合は、それを別のファイルに移動し、すべてを同じファイルに保持しないでください。

于 2012-05-08T11:59:37.717 に答える
1

このような状況では、長時間実行される操作を1つのAsyncTaskにまとめた方がよい場合があります。

もう1つのオプションは、ローダーAPIを使用することです。これにより、タスクの連鎖がはるかに簡単になりますhttp://developer.android.com/guide/topics/fundamentals/loaders.html

于 2012-05-08T11:54:37.843 に答える
0

このような状況に頻繁に直面している場合は、別のアプローチをとることができます。これは、runnables / callables内でリクエストと操作をマージし、たとえばキュー内でそれらを個別に管理することです。これが良いアプローチです。 http://ugiagonzalez.com/2012/07/02/theres-life-after-asynctasks-in-android/

于 2012-07-02T23:08:41.337 に答える