Поддержание активности и правильное завершение работы на Android - PullRequest
1 голос
/ 17 января 2012

У меня есть приложение, в котором есть две операции, давайте назовем их A и B. A - начальная операция, а B - вторая деятельность. После запуска B я не хочу, чтобы действие было уничтожено до тех пор, пока приложение не перестанет работать, поскольку B устанавливает внешнее сетевое соединение.

Я хочу, чтобы люди входили в Занятие в А, нажимали виджет и переходили в В, т. Е. А -> Б. Если они нажимают кнопку возврата на В, я не хочу, чтобы Б уничтожалось. Мне все равно, если A воссоздан или нет, хотя по умолчанию это не так. Текущая активность теперь A, если люди нажимают на виджет, чтобы перейти к B, я хочу, чтобы они повторно входили в существующую активность B с открытым сетевым подключением. Если они снова нажмут, я хочу, чтобы они пошли на упражнение А. Теперь в A, если они нажмут обратно, я хочу, чтобы все действия в приложении были закрыты.

Я где-то получил это с точки зрения создания метода onBackPressed () в B (чтобы действие B не разрушалось при переходе к A). Кроме того, добавление флага намерения "FLAG_ACTIVITY_REORDER_TO_FRONT" к намерению в A, которое вызывает B, не позволяет воссоздать B, когда я вызываю его во второй раз из A, хотя это может быть не лучшим способом.

Чтобы повторить, что я делаю:

  1. Войти в приложение на занятии А.
  2. Нажмите виджет в A, который открывает действие B.
  3. Нажмите кнопку возврата в B, чтобы открыть упражнение A. Это не должно закрывать B, но положить его в стек.
  4. Снова в A. Я нажимаю виджет для B. Это должно открыть существующее действие B.
  5. Теперь в B я нажимаю назад, чтобы добраться до A.
  6. Нажмите кнопку A, чтобы выйти из приложения.

Поток программы [Главный экран] -> Упражнение A -> Упражнение B. Клавиши «Назад» обратят этот ход.

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Вместо того, чтобы поддерживать активность B, вы не должны полагаться на активность, чтобы поддерживать сетевое соединение.Есть несколько способов справиться с этим, включая использование Service и управление соединением из пользовательского класса Application.См. Мой ответ на этот пост для получения дополнительной информации: Как поддерживать сокет сервера с помощью операций?

1 голос
/ 17 января 2012

Всякий раз, когда активность исчезает с экрана, нет никакой гарантии, что она не будет убита ОС. Это означает две вещи. Любое визуальное состояние, которое вы хотите сохранить, вы должны следить за собой. Вы можете сделать это с onSaveInstanceState и onRestoreInstanceState.

Вы упомянули, что хотите открыть сетевое соединение в активности, которая может исчезнуть с экрана. Вы должны действительно рассмотреть возможность сделать это в Service. Услуги очень похожи на действия, за исключением того, что они предназначены для работы вне экрана. Они отлично подходят для выполнения чего-то, что не требует взаимодействия с пользователем.

Что касается того, чтобы кнопка «Назад» всегда переключалась между двумя действиями, вы можете сделать это, перехватывая нажатия кнопки «Назад» в своем действии и затем переключая действия своего приложения. Однако помните, что кнопка «Назад» имеет очень специфическую функцию на Android, и пользователи привыкли к приложениям, которые ведут себя определенным образом. Старайтесь не делать ничего, что противоречит соглашениям по Android UX. Лично я нахожу разочаровывающим, когда приложения идут вразрез с соглашениями, такими как использование кнопки «Назад» для выхода из деятельности и возврата к начальному экрану.

...