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);

        }
}

}

结果,它打印x为空。将来有什么办法可以改变xAsyncTask使用它的价值吗?

4

1 回答 1

3

您需要阅读线程和 ASyncTask 的用户。当您在 AsyncTask 上调用 execute 时,myVoid 直接进入下一行,因为 ASyncTask 在不同的线程上运行,因此 x 将始终为 null,因为 AsyncTask 还没有做任何事情。您还在这里引入了跨线程和变量同步的问题。

以最好的方式,我建议你把这个问题记下来,找到一个关于使用 AsyncTask 和线程的不错的教程

于 2013-01-08T16:14:01.337 回答