> For the complete documentation index, see [llms.txt](https://programmingfundamental.gitbook.io/programmingwithjava/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://programmingfundamental.gitbook.io/programmingwithjava/programirane-za-mobilni-i-internet-ustroistva/laboratorno-uprazhnenie-8.md).

# Лабораторно упражнение 8

##

## Разбиране за нишка

&#x20;Когато дадено приложение се стартира, системата създава нишка на изпълнение за приложението, наречена "main". Тази нишка е много важна, защото тя отговаря за изпращане на събития и управление на потребителския интерфейс и обикновено се нарича нишка на **потребителския интерфейс**. Всички компоненти (дейности, услуги и т.н.) и техния изпълним код се изпълняват в същия процес и са **стартират по подразбиране в нишката на потребителския интерфейс**.

![Процес в Dalvik VM](/files/-MaXiA552W5uiOEDf_3Y)

Извършването на дълги операции като достъп до мрежата или заявки за бази данни в нишката на потребителския интерфейс ще блокира целия потребителски интерфейс и той няма да отговаря. Когато нишката на потребителския интерфейс е блокирана, събития може да бъде изпратени, включително и съобщения за изрисуване на компоненти, но от гледна точка на потребителя приложението ще е замръзнало. Освен това потребителския интерфейс на **Android не е нишково базиран** и като такъв не може да се **манипулира потребителския интерфейс от фонова нишка.**

Има две важни правила:

* Не трябва да се стартират дълги задачи на потребителската нишка (за да се избегне блокиране на потребителския интерфейс)
* Не трябва да се променя потребителския интерфейс от фонова нишка (само основната нишка, може да го променя)

Управление на нижки

В резултат на основните проблеми с блокиране на нишката на потребителския интерфейс, описани по-горе, всяко приложение за Android трябва да **използва фонови нишки** за извършване на всички продължителни задачи като четене от или писане на диска или извършване на мрежови операции. Въпреки това, има **няколко различни абстракции за управление на нишки.**

* Runnable
* HandlerThread
* ThreadPoolExecutor
