В моем приложении для Android у меня есть основной вид деятельности, который служит точкой входа к моему приложению, которое настроено в моем файле манифеста как это:
<activity android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:alwaysRetainTaskState="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Таким образом для конкретного варианта использования, позволяет, говорят, что пользователь запускает приложение от главного экрана путем нажатия на значок в средстве запуска приложения. После запуска приложения пользователь перешел от Основного вида деятельности до действия A и затем наконец к действию B. На данном этапе пользователь решает проверить их Facebook, таким образом, они нажимают кнопку "Домой" для помещения моего приложения в фоновом режиме, и запускает приложение Facebook.
После проверки их Facebook пользователь хочет возвратиться к моему приложению, таким образом, они нажимают клавишу Home и запускают приложение от средства запуска приложения (точно так же, как они сделали в первый раз, когда это было запущено).
Когда пользователь возвращается к моему приложению, я хочу, чтобы приложение возвратилось к последнему действию, которым пользователь был в том, когда приложение было помещено в фон, который в этом случае является действием B. В файле манифеста я установил alwaysRetainTaskState=true, чтобы удостовериться, что ОС не уничтожает операции моего приложения.
Теперь к моему вопросу: как я получаю поведение, которое я описал выше? Каждый раз, когда я нажимаю значок своего приложения, он всегда запускается при Основном виде деятельности, несмотря ни на что. Я думаю, что это из-за категории. Атрибут СРЕДСТВА ЗАПУСКА. Я попробовал android:launchMode=singleTask, но это не имело значения; это всегда запускается в Main.
Если бы кто-то мог бы разъяснить поглощенные фильтры, режимы запуска и задачи, которые были бы большими!
Вот как я получил его на работу в IE8:
Я решил это, добавив расшифровочную способность
и сделав ее по умолчанию (с помощью очень целого фильтра). В его метод ONCREATE
вы создаете и вызовите намерение на основе некоторых разумных по умолчанию (например, основное действие) или на основе некоторого сохраненного токена, который идентифицирует, какая деятельность должна быть запущена. Этот токен сохраняется / обновляется в onstop
метод любой деятельности, который вы хотите вызвать на перезапуске. Вы можете сохранить этот токен к предпочтениям.
Рациональная вот эта последняя активность, которая была видимой, выполнит метод ONSTOP при прервании.
Слово осторожностей здесь: я выполнил этот шаблон, и он работал достаточно хорошо. Однако кажется, что он не играет слишком хорошо с историей и, наконец, я просто сдался и дернул этот код. Никто не жаловался так далеко.
FYI singleTask
- это не то, что вы хотите, так как начинается новая задача:
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
Как вы запускаете Действие B? Какие-нибудь нестандартные режимы запуска или флаги намерения?
.