Когда выполнять поток. Когда не выполнять поток

#java #android #multithreading #asynchronous #android-asynctask

#java #Android #многопоточность #асинхронный #android-asynctask

Вопрос:

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

Ответ №1:

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

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

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

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