2011-10-06 27 views
4

片段是否在獨立線程上運行,而不是它們在其上創建的活動?Android - 哪個線程是運行的碎片?

那麼,假設我有一個片段同步調用Web服務,它是否會在從服務器檢索數據時阻止我的主要活動?

回答

6

我會假設他們在UI線程上,因爲Android在UI線程上做了如此大的事情來保持UI操作。當調用commit()時,那些事務肯定在UI線程上執行,如stated in the documentation

好像你可以用

Log.d("Fragment", "thread = " + Thread.currentThread().getName()); 

很容易地測試它,如果它是在線程「主要」,那麼它的UI線程。

+0

這個好的副作用是,你可能可以在片段內創建自己的Handler,並從你自己的線程發佈消息到更新UI等。 –

11

如上所述here Android UI不是線程安全的,所以Fragments和Activity一樣運行在同一個主線程中。因此,最好將您的Web服務調用轉換爲AsyncTask,否則您有可能會凍結應用程序。