2013-02-14 96 views

回答

0

我不太明白是什么意思,“在主UI线程中声明”,线程不声明任何东西。我假设你的意思是在Activity上宣布。那么是的,只要确保你没有并发问题(例如,当另一个人在同一个实例上写入时读取线程)。​​和volatile是你的朋友。

+0

我找不到同步的官方java文档,你能给我一个链接或例子如何做一个同步的方法? – astralmaster 2013-02-14 17:24:16

+0

'synchronized'和'volatile'是Java。 – m0skit0 2013-02-14 17:25:02

+0

我知道了,你能给我一个官方文档的链接吗? – astralmaster 2013-02-14 17:26:02

1

这是不安全的,因为创建Asynctask的Activity/Fragment在完成执行时可能不在那里,可能是因为屏幕旋转。你应该传递你需要的对象作为参数。为了更新UI,你应该使用postExecute方法。

如果你只是表示线程安全的,在android 3.x +中应该是线程安全的,如果你只使用AsyncTaks,因为AsyncTasks是在串行执行器上执行的。在Android 2.3上同时执行。

编辑

如果您需要从的AsyncTask的doInBackground方法修改UI,你可以使用活动方法runOnUiThread

+0

如果Activity已经死亡,那么如果它们在Activity上下文中,那么您传递的实例也没什么意义。 – m0skit0 2013-02-14 17:25:42

+0

“AsyncTasks在串行执行程序上执行” - >但UIThread是并发的。无论如何,你可以强制AsyncTasks在3+以上并发。 – m0skit0 2013-02-14 17:28:06

+0

是的,我只读安全和不线程安全。如果活动不存在,则应用程序崩溃(如果任务仍在执行) – alex 2013-02-14 17:28:11

1

你的问题更多的是关于Java线程和对象的线程之间的访问。

请看看这个例子来制定有关你使用的意思的话题Threadining Example