Задний стек активности Android и поддержка многозадачности

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

Вот что у меня есть:

Действие A запускает действие B для результата, поэтому...

Действие А --> Действие Б

Если в действии B пользователь долго нажимает кнопку домой и переключается на другое приложение (например, браузер), а затем снова долго нажимает кнопку домой и возвращается к моего приложения, они будут в действии B, однако задний стек в это время будет выглядеть так:

Действие A --> Интернет-браузер --> Действие B

Поэтому, когда я делаю finish(), чтобы отправить результат моего действия B, он возвращается не к моему действию A, а скорее к интернет-браузеру...

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

Главная Launcher --> Активность B

Поэтому, когда я выполняю finish() в действии B, пользователь возвращается на свой домашний экран и никогда не может вернуться к действию A, за исключением случаев, когда он снова запускает приложение из своего ящика приложений.

Есть ли способ реализовать многозадачность в этом случае? Действие B должно всегда возвращать результат действию A, независимо от того, что пользователь открыл между этими двумя.


person Gligor    schedule 25.01.2012    source источник
comment
Покажите код, который вы используете для запуска действия B. Похоже, вы неправильно устанавливаете некоторые флаги.   -  person kabuko    schedule 26.01.2012
comment
Проблема может заключаться в том, что я не устанавливаю никаких флагов, но я не уверен, какие флаги установить, может быть, вы можете указать мне правильные. Вот мой код: Intent i = new Intent(ActivityA.this, ActivityB.class); i.setAction("android.intent.action.PICK"); startActivityForResult(i, 0);   -  person Gligor    schedule 26.01.2012


Ответы (1)


В ПОРЯДКЕ. После долгих часов исследований и проб различных вещей, вот решение проблемы. Надеюсь, это поможет другим...

Решение довольно прямое и простое, в AndroidManifest.xml.

установить android:launchMode="singleTask" для действия A

установить android:noHistory="true" для действия B

Таким образом, действие B будет удалено из стека, если мы перейдем к другому приложению, такому как браузер, или выйдем на главный экран, поэтому, когда мы вернемся в наше приложение, мы вернемся к действию A.

person Gligor    schedule 26.01.2012