2010-09-26 5 views
0

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

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

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

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

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

+0

Это звучит как очень плохой способ реализации вашей игры. Вы, по сути, полагаетесь на сервер, чтобы диктовать все. Вероятно, вам стоит подумать о перепроектировании на основе запросов/ответов. Удержание соединения сокета, открытого для этого долго, обычно является отличным местом для отказа вашего приложения. – Falmarri

+0

Вот что я пытаюсь сделать - дизайн основан на запросах/ответах. Почему я хочу закрыть соединение между каждым запросом, если у каждого пользователя есть только 20-30 секунд, чтобы сделать движение друг против друга во время матча? –

ответ

1

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^