Сохранение потоков и состояния соединения в приложении Android с помощью onSaveInstanceState? - PullRequest
6 голосов
/ 06 ноября 2010

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

Мой вопрос заключается в следующем, на этом хосте запущено несколько потоковдля того, чтобы общаться и держит все открытые связи.Я читал, что мои действия могут быть временно уничтожены и восстановлены позже, и я должен использовать для этого механизм onSaveInstanceState.Тем не менее, я говорю о приложении, которое выступает в качестве «сервера» для игры и имеет открытые соединения и потоки, которые обслуживают других клиентов, что происходит с этими соединениями и потоками, если ОС решает уничтожить мою деятельность?Они прекращены?Если да, то какой шаблон будет рекомендован для правильной реализации, как я могу сохранить соединение в пакете onSaveInstanceState?это не сериализуемо.То же самое касается потоков, нужно ли мне воссоздавать и уничтожать их при уничтожении и после восстановления активности?если я держу все это состояние в каком-то статическом классе, который представляет состояние игры?Если я это сделаю, то ОС не разрушит мои потоки / соединения?

Я посмотрел пример Bluetooth-чата, который идет в комплекте с SDK, и поэтому я не обрабатываю onSaveInstanceState, поэтому совершенно неясно, что следуетЯ делаю.

Спасибо!

1 Ответ

7 голосов
/ 06 ноября 2010

что происходит с этими соединениями и потоками, если ОС решает уничтожить мою деятельность?

Если вы создали эти потоки в действии, вам лучше остановить эти потоки, либо вы утечете их.

Как сохранить соединение в пакете onSaveInstanceState?

Вы не можете.

То же самое относится и к потокам, нужно ли мне воссоздавать и уничтожать их при уничтожении и после восстановления активности?

Если они были запущены действием, тогда да, пожалуйста.

если я удержу все это состояние в каком-то статическом классе, который представляет состояние игры? Если я сделаю это, ОС не уничтожит мои потоки / соединения?

Пожалуйста, поместите свою серверную логику (потоки, соединения, серверную игровую логику) в службу Android. Пожалуйста, используйте startForeground(), чтобы сохранить эту службу, добавив Notification в строке состояния по пути, чтобы у пользователя был простой способ вернуться к активности, которая позволяет ему остановить вашу службу.

...