0

私はデータを非同期的に取得し、このデータをプロットし、ロジックを完成させました。もちろん、これをスムーズに実行する必要があるため、ビットマップに消化され、それに応じてプロットされたデータを取得するときに AsyncTask を使用します。もちろん、ループで実行されますAsyncTask がないと動作しますが、遅い/古いデバイスでは動きが鈍くなります。

アイテムには 5 つの異なるフレーバーがあるため、Asynctask の新しいインスタンスを作成し、execute を呼び出してその新しいインスタンスを実行するときに、適切にパラメーターを設定します。

特定のフレーバーの特定のタスクがすでに実行されている場合、それを確認する方法??? そのタイプのデータの処理が完了するまでスキップするように??? さまざまなデータ型を渡す必要があったため、オブジェクトのリストを使用しましたが、それは機能します

KISS が AsyncTask の 5 つの異なるインスタンスを作成し、 taskInstance_n.getStatus() != AsyncTask.Status.RUNNINGをチェックすることであることは知っています が、それを行うためのよりクリーンでよりクールな一般的な方法があるかもしれないと思いました????

    ArrayList<Object>parms = new ArrayList<Object>
    ...
    do
    {
      ..grab the data ...
      switch(id)
      {
        case 0:
                 parms.clear();
                 parms.add(arg1);
                 parms.add((type1)arg2)
                 parms.add((type2)arg3)
                 if( ! task is running with arg1)  ---->how do I do this
                    new myAsyncTask().execute(parms,null,null);

              break;
        case 1:
        ... other 4 choices simar way to call it
      }  // end of switch

      ...

  }while(i_get_data)
4

1 に答える 1

0

一般に信じられていることとは反対に、AsyncTasks は並行して実行されず、キューを形成して互いに待機します (HoneyComb を除きますが、とにかく API9-10 をターゲットにするべきではありません)。したがって、2 つの AsyncTask が同じタイプのデータで動作することを心配する必要はありません。何か新しいものを取得し、パラメーターを準備して起動すると、以前のすべての AsyncTask が完了するまで辛抱強く待機します。

于 2013-03-25T00:42:02.027 に答える