HandlerThread
HandlerThread е удобен клас за стартиране на нова работна нишка, която последователно изпълнява задачи.
HandlerThread инициира Looper в нишка за обработка на Runnable или Message
Изпълнение на Runnables в HandlerThread
След като HandlerThread е стасртиран може да изпълнява кода в работната нижка чрез Handler
В горния код извикваме метода post на манипулатора, за да поставим Runnable, който да бъде изпълнен възможно най-скоро. Класът Handler поддържа няколко други начина за планиране на Runnable за обработка в бъдеще:
Метод
Описание
post
Веднага изпратете в опашка Runnable за възможно най-ранно изпълнение.
postAtTime
Поставяне в опашката Runnable за изпълни в абсолютно време, определен в милисекунди
postDelayed
Поставяне в опашката Runnable за изпълни след определеното закъснение в милисекунди
postAtFrontOfQueue
Веднага поставете в опашка Runnable най-отпред отпред, за да бъде изпълнен.
Обработка на Messages в HandlerThread
Вместо да изпълнява произволен код на фоновата нишка с помощта на Runnable, както е показано по-горе, Handler може също да изпраща съобщения в опашка с пакетирана информация. За да изпратите съобщение на работната нишка през манипулатора:
В горния код извикваме метода sendMessage на манипулатора, за да изпратим в опашка съобщение, което да бъде обработено възможно най-скоро. Класът Handler поддържа няколко други начина за планиране на обработка на съобщение в бъдеще:
Метод
Описание
sendMessage
Избутва съобщение в края на опашката за съобщения.
sendMessageDelayed
Изпраща съобщение, което трябва да бъде доставено след изтичане на определеното време.
sendMessageAtTime
Изпраща съобщение, което трябва да бъде доставено в посочения абсолютен час.
sendEmptyMessage
Изпраща съобщение, съдържащо само един int код.
sendEmptyMessageDelayed
Изпраща съобщение, което трябва да бъде доставено след изтичане на определеното време.
sendEmptyMessageAtTime
Изпраща съобщение, което трябва да бъде доставено в посочения абсолютен час.
Празни съобщения могат да се използват за обикновени манипулатори, получаващи съобщение от типа „опресняване“ или „уведомяване“, което не изисква допълнителни данни.
Messages срещу Runnables?
Често целта на Handler да приеме както Runnable, така и Message се поставя под въпрос. Имайте предвид, че Runnable е просто Messages, съхраняващо кодовия блок и че и двете се съдържат в една и съща опащка MessageQueue, която трябва да бъде обработена. Едно предимство на Messages е, че изпраща съощение което не е задължително да знае нещо за изпълнението, което може да позволи по-добро капсулиране.
Спиране на HandlerThread
Работната нишка може да бъде спряна незабавно с:
В API> = 18, вместо това трябва да използваме quitSafely (), за да завършим обработката на чакащите съобщения, преди да бъде спряна задачата.
HandleThread задачите могат да се изпълняват паралелно на потребителската нишка но не и паралелно по можду си.
Last updated
Was this helpful?