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

##

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

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

![Процес в Dalvik VM](https://3165743208-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MUbVVR-jiMUx7iVRyw6%2F-MaXfw-H2FtwLL6C_K9S%2F-MaXiA552W5uiOEDf_3Y%2Fimage.png?alt=media\&token=17c7b1b4-d660-44c8-87dc-03c3c30398b5)

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

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

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

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

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

* Runnable
* HandlerThread
* ThreadPoolExecutor



