使用 AsyncTask 的 doInBackground() 方法在主 UI 线程中声明的对象实例是否安全?
问问题
165 次
3 回答
1
您的问题更多关于 Java 线程和线程之间的对象访问。
请看一下这个例子,以更好地理解主题线程示例
于 2013-02-14T17:46:13.470 回答
1
这是不安全的,因为创建 Asynctask 的 Activity / Fragment 在完成执行时可能不存在,可能是因为屏幕旋转。您应该将所需的对象作为参数传递。要更新 UI,您应该使用 postExecute 方法。
如果您只指线程安全,那么在 android 3.x+ 中,如果您只使用 AsyncTaks,则应该是线程安全的,因为 AsyncTasks 是在串行执行器上执行的。在 Android 2.3 上是同时执行的。
编辑
如果需要从 AsyncTask 的 doInBackground 方法修改 UI,可以使用活动方法 runOnUiThread
于 2013-02-14T17:23:57.190 回答
0
我不太明白“在主 UI 线程中声明”是什么意思,线程不声明任何内容。我假设您的意思是在Activity
. 那么是的,只要确保你没有并发问题(例如,一个线程读取而另一个线程正在同一个实例上写入)。synchronized
并且volatile
是你的朋友。
于 2013-02-14T17:18:29.340 回答