Когда нить.Когда не нить - PullRequest
0 голосов
/ 03 июня 2011

Я новичок в идее многопоточности, но не в асинхронном поведении.Моему приложению для Android требуется ~ 180 миллисекунд для запуска и ~ 550 миллисекунд, когда я использую метод GoogleAnalytics trackViewPage и конструктор MobFoxView.Исходя из Actionscript 3, все, что «занимало время», было автоматически асинхронным, и я был вынужден обработать это со слушателями, что немного отличается в Android, как кажется.Кажется, Я ответственен за решение, когда что-то должно быть асинхронным.Итак, я думаю, мой вопрос: КАК решить, что должно быть асинхронным?Это за миллисекунды выполнения?Но, возможно, это сильно меняется между устройствами.Возможно, это должно быть ... или это ....?

1 Ответ

4 голосов
/ 03 июня 2011

Вам нужно знать одну важную вещь - по умолчанию все, что вы делаете без запуска отдельного потока, выполняется в «основном» потоке (также известном как UI-поток).

Если вы делаете что-то, что может блокировать - ваш пользовательский интерфейс будет зависать, и пользователи будут страдать.

Если вы делаете что-то, что связано не с пользовательским интерфейсом, а с запросом к базе данных, сетевым вызовом или потенциально длинной блокирующей операцией - вам нужно запустить поток напрямую или использовать AsyncTask.

Также вы должны заметить, что если вы попытаетесь что-то сделать с пользовательским интерфейсом (например, установить значение для TextView) из неосновного потока, у вас ничего не получится. Пользовательский интерфейс может быть доступен только из UI-Thread.

...