0

私は 2AsyncTaskを持っAsyncOneていAsyncTwoます。最初の AsyncTask バックグラウンド メソッドでは、文字列値を取得し、それを設定していonpostexecuteます。

このようなitem = i.getname();

ここitemにグローバル変数があります。

今、私はこの項目の値onpostexecuteを AsyncTwo のメソッドに設定していますが、そこに null が表示されますか?

アイテムの値を取得するには?

4

3 に答える 3

1

あなたがしていることはあなたのコードとグローバル変数のもので正しいです、ちょうどあなたの両方のasyncTaskが同時に実行モードになってはいけないことを確認してください.1番目のpostExecute()で2番目のタスクを開始してください。

于 2013-02-02T07:17:45.090 に答える
0

非同期タスク2を開始するときは、非同期タスク1が終了していることを確認する必要があります。値を設定できるときにpublishProgressを呼び出して、タスク1で非同期タスク2を開始するよりも、アイテムを非同期タスク1のフィールドとして保持できますonProgressUpdate

于 2013-02-02T07:14:56.783 に答える
0

あなたの説明から、バックグラウンドで実行されている2つの同時タスクがあり、task2はtask1の結果に依存しているようです。それらは同時に実行されているため、task2が task1 よりも先に終了する可能性があるため、 task2 が終了したときにtask1の結果が得られるという保証はありませ

2 つのタスクを同時に実行できるようにするには、 task1 のdoInBackround()メソッドを同期し、 task1で同期getItem()メソッドを提供します

// in task1
private Object item; // instance variable to be set in doInBackground
protected synchronized Object doInBackground(Object... objects) {
    // set item to some value here
    item = ...;
}
public synchronized Object getItem () {
    return item;
}


// in task2
protected Object doInBackground(Object... objects) {
    // do work of task2
    ....

    // when finishing our work, ready to get the result of task1.
    // we don't call task1.getItem() in onPostExecute() to avoid possibly blocking the UI thread
    Object item = task1.getItem();
    // pass item to the onPostExecute method
}

上記のコードでは、task2はtask1が完了するまで待機し、task1よりも高速に実行された場合に結果を取得します。

于 2013-02-02T07:26:18.370 に答える