2013-02-14 89 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