1

使用 AsyncTask 的 doInBackground() 方法在主 UI 线程中声明的对象实例是否安全?

4

3 回答 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 回答