我不是在写我的整个代码,我有以下简单的结构:
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
中这样做了,问题仍然存在。
答案 0 :(得分:1)
这是异步任务的本质。 异步任务主要用于长时间运行;像网络摄像头,I / O操作等,因为他们可能需要一段时间。
如果你想在AsyncTask完成时进行回调,你可以覆盖OnPostExecute()方法
答案 1 :(得分:1)
发生了什么事?
AsyncTask
是异步的。引用the documentation:
此类允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序。
使用AsyncTask
的原因是在后台线程中工作(例如,下载一些数据),然后在主应用程序线程上进行一些工作(例如,根据该数据更新UI)
无论如何都要避免这种情况?
摆脱AsyncTask
,或学习如何正确使用它。除其他外:
如果没有适当的同步逻辑,请不要在多个线程中修改相同的数据
不要尝试分叉后台线程,然后阻止主应用程序线程(看起来像你想要的那样),因为它首先消除了后台线程的整个点
< / LI>如果您在doInBackground()
结束时有想要做的工作,请将该工作放在onPostExecute()
中,而不是放在execute()
或executeOnExecutor()
来电后的语句中。< / p>