Ремонт холодильников на дому03.09.2017Последствия наличия единственного главного потока Может возникнуть вопрос: почему так важен факт, что большая часть кода в приложении Android выполняется в главном потоке, а не где-либо еще? Причина в том, что главный поток отвечает за возврат к своей очереди, чтобы обеспечить реакцию на события пользовательского интерфейса. Следовательно, главный поток не должен удерживаться на протяжении длительного времени. Если какая-то работа занимает более 5 секунд, ее нужно выполнять в отдельном потоке либо отложить, указав главному потоку на необходимость возврата, когда он освободится от другой обработки. Однако выполнение работы в отдельно потоке не так просто, как может показаться поначалу. Пулы потоков, поставщики контента и внешние службы Когда внешние клиенты или компоненты, находящиеся за пределами процесса, обращаются к поставщику контента за данными, для этого вызова выделяется поток из пула потоков. То же самое справедливо и в отношении внешних клиентов, подключающихся к службам. После обсуждения главных и рабочих потоков исключительно полезно воспользоваться служебным классом Utils и определить, какой поток выполняет вашу часть кода. Затем следует просмотреть LogCat и выяснить идентификатор потока. Возможно вам понадобится ремонт холодильников на дому. С помощью метода logThreadSignature() можно выяснить, какой поток выполняет код. Можно также воспользоваться методом sleep() из библиотеки Java и посмотреть, что произойдет, если приостановить главный поток и, таким образом, не позволить ему обрабатывать очередь сообщений. Как видите, вызов функции sleep() помещен в служебный метод sleepForInSecs (). Мы уже кратко упоминали об идее откладывания работы в главном потоке, когда такое необходимо. Это делается через обработчики. Обработчики используются в Android повсеместно, так что главный поток пользовательского интерфейса не удерживается. Они также играют важную роль при взаимодействии с главным потоком других порожденных рабочих потоков.
|
|
|