Могу ли я создать более одного объекта-обработчика для потока с помощью петлителя? Предположим, я создал два новых объекта Handler
h1
и h2
, связанные с UIThread's Looper
. h1
вывешивает Message
m1
и h2
вывешивает m2
к Looper
.does в UIThread в h1.handleMessage()
и h2.handleMessage()
процесса m1 и m2, соответственно, так что другие события, связанные с UI, такие как штрихи обрабатываются соответствующими обработчиками ??Темы обработчика Android
ответ
Целью HandlerThread является создание Нити с ее Looper.
Могу ли я создать более одного объекта-обработчика для потока с петлителем?
Да, несколько обработчиков могут использовать тот же Looper и MessageQueue.
так, чтобы другие связанные с UI события, такие как касания, обрабатывались их соответствующими обработчиками?
Хотя я смущен тем, что вы пытаетесь задать здесь, я знаю, что только основной поток может получить доступ к объектам пользовательского интерфейса.
Я думаю, что ответ Сэма не получает.
вопрос: если у меня есть 2 или более обработчиков, который создается в том же потоке, или с тем же петлителя в качестве параметра конструктора в следующем коде:
Handler h1 = new Handler(Looper.mylooper()) {//override handleMessage, if receiving messageA then do actionA};
Handler h2 = new Handler(Looper.mylooper()) {//override handleMessage, if receiving messageA then do actionB}
то я делаю это: h2.sendMsg(messageA)
, какой обработчик обработает сообщение?
Мой ответ Handler h2, каждое сообщение будет обрабатываться только один раз обработчиком выбранного атрибута сообщения target
, по умолчанию, который посылает который обрабатывает. В вашем вопросе h1.handleMessage()
и h2.handleMessage()
выполняйте процесс m1 и m2 соответственно, чтобы другие связанные с UI события, такие как касания, обрабатывались их соответствующими обработчиками.
Мы можем погрузиться в исходный код Handler, и обнаружили, что все метод sendMessage
будет прыгать в следующем:
private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
msg.target = this; // Note this!
...
return queue.enqueueMessage(msg, uptimeMillis);
}
Когда нити Looper
собирается принять сообщение из очереди, то будет отправлять сообщение в соответствии с атрибутом Message
«s target
:
msg.target.dispatchMessage(msg);//decides which handler to process. This code is in Looper.loop()
в общем, мы будем получать сообщения в тот же обработчик, который мы используем для отправки сообщений
- 1. 3 темы два обработчика?
- 2. темы android
- 3. Android: Передача службы обработчика
- 4. Логика обработчика в Android
- 5. Android: Сравнение сообщения обработчика
- 6. Изображение обработчика Android SlidingDrawer
- 7. Темы Интеграция Android-приложения
- 8. темы для Android CalendarView
- 9. Android - Использование темы
- 10. Android темы и услуги
- 11. Местоположение Android и темы
- 12. Android активной загрузки темы
- 13. Android: недостатки без темы
- 14. Android - Темы не выполняются
- 15. Android-темы и стили
- 16. Android и темы
- 17. Android Темы и стили.xml
- 18. Темы в Android смешивает
- 19. Остановка темы на Android
- 20. Темы в Android?
- 21. Сбросить темы Android Studio
- 22. Android-темы ListView
- 23. Android-темы/обратные вызовы
- 24. Android темы тайм-аут
- 25. Android view.setBackgroundColor() из темы
- 26. Загружаемые темы на Android
- 27. Android - Что такое сообщение обработчика?
- 28. Android Dialog отключить использование обработчика
- 29. Вытянуть сообщение от обработчика Android
- 30. Повторное использование одного обработчика Android
Только один вопрос, прежде чем я расскажу, что я имел в виду под моим последним высказыванием. Итак, h1.handleMessage() обрабатывает сообщения, отправленные h1 на петлитель? – tez
Правильно, 'h1' обрабатывает сообщения или Runnable, предназначенные для' h1'. Я не верю, что у него есть доступ к любым сообщениям для 'h2'. – Sam
Я не понимаю, что вы подразумеваете под «доступом к любым сообщениям для h2». Вы имеете в виду, что h1.handleMessage() не имеет никакого доступа к m2? И что я имел в виду под «другими событиями, связанными с UI, такими как касания обработанные их соответствующими обработчиками », я думаю, что любые события, такие как касания, клики на пользовательском интерфейсе, помещают сообщение/runnable в Looper, и их обработчики будут обрабатывать их. Это только моя спекуляция. Не знаю как верно – tez