Java OnCreate中的代码是';运行不正常

Java OnCreate中的代码是';运行不正常,java,android,android-asynctask,oncreate,Java,Android,Android Asynctask,Oncreate,我不是在写我的全部代码,我有以下简单的结构: 公共类CreateEventActivity扩展了ActionBarActivity{ int x; void onCreate(){ 新建AsyncTask1().execute();//这里我更改了x的值 Log.i(“000000”,String.valueOf(x)); } 公共AsyncTask1扩展了AsyncTask{ //过程包括将x的值更改为4 Log.i(“111111”,String.valueOf(x)); } } 在日志中

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

公共类CreateEventActivity扩展了ActionBarActivity{
int x;
void onCreate(){
新建AsyncTask1().execute();//这里我更改了x的值
Log.i(“000000”,String.valueOf(x));
}
公共AsyncTask1扩展了AsyncTask{
//过程包括将x的值更改为4
Log.i(“111111”,String.valueOf(x));
}
}
在日志中:标记为000000的日志出现在标记为111111的日志之前发生了什么


首先,我认为问题是因为我在
onPostExecute
中链接了x的值,所以我在
doInBackground
中这样做了,问题仍然是一样的

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

如果希望在AsyncTask完成时进行回调,可以重写OnPostExecute()方法

发生什么事了

AsyncTask
是异步的。引述:

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

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


有没有办法避免这种情况

摆脱
异步任务
,或者学习如何正确使用它。除其他外:

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

  • 不要尝试分叉一个后台线程,然后阻塞主应用程序线程(这似乎是您想要的),因为这首先会消除后台线程的整个点


如果在
doInBackground()
结束时有工作要做,请将该工作放入
onPostExecute()
,而不是放入
execute()
executeOnExecutor()
调用后的语句中。

异步任务在另一个线程上并行运行代码。这就是重点。它在vs代码中运行的顺序在它执行的函数中是未定义的,并且每次运行时可能会更改。是否有任何方法可以避免这种情况?是的,就像我说的,从AsyncTask类实现OnPostExecute。您可以在活动中创建在该方法中设置的静态属性。设置好后,调用Log.i方法。谢谢,这很有意义!但是,我使用AsyncTask是因为我需要一个值(在数据库中)来初始化视图,那么我可以做什么?@MahmoudKhateeb:onPostExecute()中的初始化视图。这是在主应用程序线程上调用的,此时您可以安全地更新UI。