OnCreate中的代码未按顺序运行

时间:2015-03-25 23:09:48

标签: java android android-asynctask oncreate

我不是在写我的整个代码,我有以下简单的结构:

public class CreateEventActivity extends ActionBarActivity{
   int x; 
   void onCreate(){
      new AsyncTask1().execute();//here I change the value of x
      Log.i("000000",String.valueOf(x));
   }
   public AsyncTask1 extends AsyncTask<Void, Void ,Void>{
    // process include changing the vlaue of x to 4 
     Log.i("111111",String.valueOf(x));
     }
}
日志中的

:带有标签000000的日志出现在带有标签111111的日志之前?

首先我认为这个问题是因为我在onPostExecute中追逐x的值,所以我在doInBackground中这样做了,问题仍然存在。

2 个答案:

答案 0 :(得分:1)

这是异步任务的本质。 异步任务主要用于长时间运行;像网络摄像头,I / O操作等,因为他们可能需要一段时间。

如果你想在AsyncTask完成时进行回调,你可以覆盖OnPostExecute()方法

答案 1 :(得分:1)

  

发生了什么事?

AsyncTask是异步的。引用the documentation

  

此类允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序。

使用AsyncTask的原因是在后台线程中工作(例如,下载一些数据),然后在主应用程序线程上进行一些工作(例如,根据该数据更新UI)

  

无论如何都要避免这种情况?

摆脱AsyncTask,或学习如何正确使用它。除其他外:

  • 如果没有适当的同步逻辑,请不要在多个线程中修改相同的数据

  • 不要尝试分叉后台线程,然后阻止主应用程序线程(看起来像你想要的那样),因为它首先消除了后台线程的整个点

    < / LI>

如果您在doInBackground()结束时有想要做的工作,请将该工作放在onPostExecute()中,而不是放在execute()executeOnExecutor()来电后的语句中。< / p>