2012-01-16 5 views
0

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

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

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

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

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

Поток программы [Начальный экран] -> Активность A -> Активность B. Обратные клавиши будут отменять этот поток.

ответ

1

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

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

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

+0

Да, вы правы, вы не можете зависеть от объектов Activity, выживающих, если они выходят за пределы экрана, а класс Service лучше всего поддерживать сетевое соединение. Это то, что я сделал, и он работает до сих пор. Благодарю. –

2

Вместо того чтобы пытаться сохранить активность Б в живых, вам не следует полагаться на активность, чтобы поддерживать сетевое соединение в живом режиме. Существует несколько способов обращения с этим, включая использование Service и управление соединением из пользовательского класса Application. См. Мой ответ на этот другой пост для получения дополнительной информации: How to maintain Server Socket through Activities?

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