使用AsyncTask的doInBackground()方法中在主UI线程中声明的对象实例是否安全?
发布于 2013-02-15 01:18:29
我不太明白你所说的“在主UI线程中声明”是什么意思,线程不会声明任何东西。我想你的意思是在Activity上声明。那么是的,只要确保你没有并发问题(例如,一个线程在读,而另一个线程在同一个实例上写)。synchronized和volatile是你的朋友。
发布于 2013-02-15 01:23:57
这是不安全的,因为创建Asynctask的活动/片段在完成执行时可能不在那里,可能是因为屏幕旋转。您应该将所需的对象作为参数传递。为了更新UI,您应该使用postExecute方法。
如果你只是指线程安全,那么在android中,如果你只使用3.x+,那么AsyncTaks应该是线程安全的,因为AsyncTasks是在串行执行器上执行的。在Android2.3上,是并发执行的。
编辑
如果需要从AsyncTask的doInBackground方法修改UI,则可以使用活动方法runOnUiThread
发布于 2013-02-15 01:46:13
您的问题更多地是关于Java线程和线程之间的对象访问。
请看一下这个例子,以便更好地理解主题Threadining Example
https://stackoverflow.com/questions/14880369
复制相似问题