2011-10-06 2 views
4

Являются ли фрагменты работающими на отдельной ветке, чем активность, на которой они были созданы?Android - Какой поток - это фрагменты?

Предположим, у меня есть фрагмент, который синхронно вызывает веб-службу, также блокирует ли мое основное действие при извлечении данных с сервера?

ответ

6

Я бы предположил, что они находятся в потоке пользовательского интерфейса, так как Android делает такое большое дело, поддерживая действия пользовательского интерфейса в потоке пользовательского интерфейса. При вызове commit() эти транзакции определенно выполняются в потоке пользовательского интерфейса, как stated in the documentation.

Похоже, вы можете проверить это довольно легко с

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

Если это на резьбе «главный», то это в потоке пользовательского интерфейса.

+0

Хорошим побочным эффектом этого является то, что вы, вероятно, можете создать свой собственный обработчик внутри фрагментов и опубликовать сообщения с него из ваших собственных потоков, чтобы обновить интерфейс и т. Д. –

11

Как указано here Android UI не является потокобезопасным, и поэтому фрагменты работают в той же основной теме, что и Activity. Таким образом, лучше переместить вызов веб-сервиса в AsyncTask, иначе вы рискуете заморозить приложение.

Смежные вопросы