2012-05-08 10 views
6

私はバーコードデコーダに取り組んでいます。いったんスキャンしたものをデコードするために、インターネット上でバーコードを複数のAPIに渡します。 私はいくつかのXML解析をリンクしなければならないということです。それが正しいかどうかはわかりません。Android AsyncTask inside AsyncTask

バーコードがスキャンされると、私のプログラムはAPIを経由して製品名を取得するASyncTaskを呼び出します。それが名前を持つと、別のASyncTaskを呼び出すようにします。私はこれが他ののonPostExecute()のASyncTaksをインスタンス化することによって可能であることを知っていますが、これは間違っていると思います。 メインアクティビティ内で2番目のASyncTaskをインスタンス化し、最初のASyncTaskが終了するまで待機させることは可能ですか?

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

+3

2つのタスクを使用する理由は何ですか?なぜあなたは最初のタスクdoInBackgroundで何をしたいのですか? – Renard

+2

私は自分の主な言語ではないかもしれないので、自分の言語(英語)を楽しむべきではありません。 – waqaslam

+0

@Renard doInBackgroundのすべてを手放すのはあまりにも面倒です。私の最初のASyncTaskは、最初に処理する必要のある別の結果を返すことができ、結果に応じてさらに解析を行います。だから、他のASyncTaskを起動することで、複数の当事者のコードを分割してより明確にすることができます。 – MagicMicky

答えて

17

私はそれが最初のAsyncTaskのonPostExecute第二AsyncTaskを開始するために絶対に正当だ、両方の操作を混在することは悪い論理的な考え方だと思います「子孫」とは言ったように、 - は、あなたがそれを直接onPostExecute自体の内部にしたくない場合は、

活動やコールでそれを実行するためのハンドラを設定し、「あなたは「日が分離保つ奨めてきました」このハンドラはonPostExecuteです。

最後のこと - 多くのロジックがある場合は別のファイルに移動し、同じファイルにすべて保存しないでください。

+0

さて、私は自分のアクティビティでハンドラを設定し、 'onPostExecute()'からハンドラを呼び出そうとします。 ええ、私は複数のファイル、さらに複数のパッケージを持っています。これは私の最初の本当のAndroidプロジェクトです、私はそれができるだけきれいにしたい! – MagicMicky

+0

- 幸運。 :) – MByD

1

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

別のオプションは、ローダーAPIを使用することで、これは連鎖する作業がはるかに容易になりhttp://developer.android.com/guide/topics/fundamentals/loaders.html