2011-10-06 34 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,否则您有可能会冻结应用程序。