Доступ к стеку активности Android из асинхронного потока? - PullRequest
0 голосов
/ 26 сентября 2010

В StackOverflow существует масса вопросов, связанных со стеком активности, но я не нашел ни одного, который бы ответил на мой вопрос.Я работаю над онлайн-игрой, которая (на данный момент) имеет 3 различных вида деятельности:

  1. Вход / Регистрация
  2. Меню (отображается при входе в систему, включает «новую игру», «моя статистика ", и некоторые другие вещи ... Меня сейчас беспокоит только вариант" новая игра ".)
  3. Игра

Соединение с сокетом происходит ввход в систему / регистрация, которая создает пользовательский сервис, который работает в фоновом режиме.Поскольку данные могут поступать в любой момент, используемый мной класс сокетов имеет асинхронные обработчики ответов.Это означает, что у меня не будет доступа к текущему контексту всякий раз, когда получено сообщение.

Мне нужен способ выяснить, каков текущий контекст, когда принимаются различные типы сообщений, чтобы я мог обработать сообщениесоответственно.Например, если пользователь достиг игрового экрана (№ 3 выше) и получил сообщение одного типа, он должен просто сказать игровому экрану обновиться с новым игровым состоянием.Однако пользователь может находиться на том же игровом экране и получать сообщение другого типа, которое гласит «закройте экраны № 3 и № 2 и выйдите из системы, вернув их на экран № 1».

По сути,Я пытаюсь найти лучший способ получить текущую активность / контекст, определить, является ли это правильный контекст для текущего сообщения, и как с ним справиться.

1 Ответ

1 голос
/ 27 сентября 2010

Вы можете использовать заказанную трансляцию.Пусть служба рассылает трансляцию.Сделайте так, чтобы каждый вид деятельности регистрировался для трансляции с любой приоритетной схемой, которую вы считаете подходящей.Выполните действие, которое получает широковещательный вызов abortBroadcast(), чтобы трансляция была остановлена.Таким образом, ваша служба может «вслепую» отправить событие.

В этом случае вам может даже не потребоваться его заказ.Я думаю, что BroadcastReceiver, зарегистрированный действием, будет получать трансляции только в том случае, если действие находится на переднем плане (не приостановлено).

Я немного больше написал о шаблоне в сообщении в блоге , хотя для немного другой ситуации (либо обработайте событие в действии, либо поднимите Notification).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...