Поддержание стандартного состояния обратного стека активности приложения в Android (в режиме запуска singleTask) - PullRequest
4 голосов
/ 23 февраля 2011

У меня проблемы с поиском поддержки состояния моего приложения для Android в разработке.

Просто для пояснения, я не говорю о поддержании состояния активности (то есть отслеживание значений текстовых полей, флажков и т. Д. Для конкретного действия).

Скажем, например, в моем приложении есть две операции A и B. Когда я запускаю свое приложение, оно приводит меня к активности A, а нажатие на кнопку приводит к активности B. В этот момент я нажимаю кнопку «Домой» на телефоне, чтобы вернуться к основному пользовательскому интерфейсу Android и выйти из приложения. Однако, если я решу снова запустить свое приложение, оно должно привести меня к активности B, на которой я остановился перед нажатием кнопки «Домой», но вместо этого оно приведет меня к операции A.

Кто-нибудь знает, как я могу это исправить?

(я использую Samsung Vibrant в случае, если вам нужно знать)

Ответы [ 3 ]

4 голосов
/ 23 февраля 2011

«Однако, если я решу снова запустить свое приложение, оно должно привести меня к занятию B, где я остановился перед нажатием кнопки« Домой », но вместо этого оно приведет меня к занятию A».

Да, так и должно быть.Если это не так, вы сделали что-то в своем приложении, чтобы сказать платформе изменить ее поведение.(Посмотрите на ApiDemos как пример, он использует стандартное поведение, которое выглядит так, как будто вы описываете как то, что вы ожидаете.)

На что обращать внимание:

  • Не используйте FLAG_ACTIVITY_NEW_TASK при запуске операций.
  • Не используйте режимы запуска singleTask или singleInstance.
  • Не видите флаг clearTaskOnReset.
1 голос
/ 23 февраля 2011

Вы воображаете, что есть нечто, называемое «Приложение», но это иллюзия.Ваше приложение - это просто набор действий, служб, получателей и т. Д.

Если вы посмотрите на теги intent-filter в манифесте, вы увидите, что каждый значок на главном экране связан с фильтром.например:

     <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>

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

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

Что касается того, где на самом деле хранить общее состояние,это зависит от того, насколько сложным является ваше состояние.Это хорошее место для начала: http://developer.android.com/guide/topics/data/data-storage.html

0 голосов
/ 07 октября 2013

Насколько я понимаю, вы хотите, чтобы ваше приложение запускалось и каждый раз происходило по-разному, в зависимости от того, где вы остановились в последний раз. http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html Жизненный цикл активности находится по ссылке. Ваш метод onActivityDestroyed каким-то образом должен сохранять текущее состояние, а oncreate должен восстановить его. Постоянство может быть достигнуто с помощью общих предпочтений, сохраненных в файле, базе данных или по сети http://developer.android.com/guide/topics/data/data-storage.html Такое непредсказуемое поведение может вызвать замешательство у конечного пользователя, если оно плохо реализовано, поэтому используйте здравый смысл.

...