Перейти к содержимому

Создание гибридного Handler

handler thread ui

  • Please log in to reply
Сообщений в теме: 5

#1
sayler

sayler

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений
Здравствуйте,

Подскажите пожалуйста как сделать гибридный обработчик сообщений (Handler), чтобы некоторые сообщения обрабатывались в UI потоке, а некоторые в отдельном потоке, но чтобы сохранялся общий порядок выполнения UI и Non UI сообщений?

#2
Lopa

Lopa

    Активный участник

  • Пользователи
  • PipPipPip
  • 704 сообщений
  • Телефон: Nexus 5
AsyncTask ?
Моё приложение для считывания билетов московского метро:
play.google.com/store/apps/details?id=vc.qc.mifairy
Требует телефон с технологией NFC.

#3
dimasokol

dimasokol

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 376 сообщений
  • Город:Москва
  • Телефон: Nexus 4

Подскажите пожалуйста как сделать гибридный обработчик сообщений (Handler), чтобы некоторые сообщения обрабатывались в UI потоке, а некоторые в отдельном потоке, но чтобы сохранялся общий порядок выполнения UI и Non UI сообщений?


И как это вообще возможно?

Если мы запускаем второй поток, то строгий порядок выполнения рушится.

Если мы ждём выполнения таски на втором потоке, то смысл его вообще запускать?

И каким боком тут handler, когда пахнет с очевидностью стандартнейшей джавашной вещью?
В данный момент — Android-разработчик, бывший web-разработчик, а ещё ранее баловался с j2me и огромной кучей самого разного.
Где ещё меня искать в сети: 1) Мой блог, 2) Мои приложения на Google Play

#4
sayler

sayler

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

И как это вообще возможно?

Если мы запускаем второй поток, то строгий порядок выполнения рушится.

Если мы ждём выполнения таски на втором потоке, то смысл его вообще запускать?

И каким боком тут handler, когда пахнет с очевидностью стандартнейшей джавашной вещью?


Спасибо за подсказку.
Мне нужно обрабатывать действия пользователя по порядку, т.е. некоторые команды выполняются в UI потоке, а некоторые в фоновом потоке (связанной с продолжительностью выполнения) суть проблемы в том что старт обработки сообщения должен идти только после завершения работы предыдущего сообщения (независимо в каком потоке выполняется).
Если Handler инициализирован в главном потоке то сообщения обрабатываются по порядку, но как их совместить с фоновым выполнением сообщений, вот в чем проблема.
То что вы подсказали по сути получится наоборот.

#5
dimasokol

dimasokol

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 376 сообщений
  • Город:Москва
  • Телефон: Nexus 4

То что вы подсказали по сути получится наоборот.


Handler не имеет отношения к ui-потоку, это инструмент доступа к Looper-у (main looper в случае UI).

Задача решается ровно наоборот: заводится единая фоновая очередь команд (handler тут не нужен вообще, он — повторяю — совсем для других целей), по итогам выполнения задачи UI уже обновляется.

В архитектуре android-приложения ВООБЩЕ не должно быть UI-завязок, это чистейший (до рафинированности) паттерн «Presenter», всего лишь отображающий состояние остального приложения.
В данный момент — Android-разработчик, бывший web-разработчик, а ещё ранее баловался с j2me и огромной кучей самого разного.
Где ещё меня искать в сети: 1) Мой блог, 2) Мои приложения на Google Play

#6
sayler

sayler

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Handler не имеет отношения к ui-потоку, это инструмент доступа к Looper-у (main looper в случае UI).

Задача решается ровно наоборот: заводится единая фоновая очередь команд (handler тут не нужен вообще, он — повторяю — совсем для других целей), по итогам выполнения задачи UI уже обновляется.

В архитектуре android-приложения ВООБЩЕ не должно быть UI-завязок, это чистейший (до рафинированности) паттерн «Presenter», всего лишь отображающий состояние остального приложения.


Обработка сообщений связана с взаимодействием с интерфейсом (в основном), при этом используется и отложенное выполнение (postDelayed), но одно сообщение необходимо выполнять в фоне.
Решение найдено путём создания своего класса на основе Handler, с добавлением функций pause и resume, чтобы приостанавливать обработку сообщений во время обработки фонового сообщения.
Спасибо за внимание.





Also tagged with one or more of these keywords: handler, thread, ui

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных