2

たとえば、次のクラスがあります。

public class MyClass{

  private static int x;
  private AsyncWorker worker;


  public void myVoid(){
     worker = new Worker;
     worker.execute();
     if (x == null){
         Log.v("Say something: ", "x is null");
     }
  }


class AsyncWorker extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub

            x = 10;

            return null;
        }

        @Override
        protected void onPostExecute(Void result){
            super.onPostExecute(result);

        }
}

}

その結果、xnull であると出力されます。将来的にその値を変更xして使用する方法はありますか?AsyncTask

4

1 に答える 1

3

スレッド化と ASyncTask のユーザーについて読む必要があります。AsyncTask で execute を呼び出すと、AsyncTask は別のスレッドで実行されているため、myVoid は次の行に直接進みます。したがって、AsyncTask はまだ何も実行していないため、x は常に null になります。ここでは、クロススレッドと変数の同期に関する問題も紹介しています。

可能な限り良い方法で、質問を取り下げて、AsyncTask とスレッドの使用に関する適切なチュートリアルを見つけることをお勧めします。

于 2013-01-08T16:14:01.337 に答える