Android: влияет ли FLAG_ACTIVITY_NEW_TASK на тот же процесс? - PullRequest
8 голосов
/ 08 марта 2011

Предположим, что приложение уже имеет стек действий, а затем из контекста приложения запускается новое действие с FLAG_ACTIVITY_NEW_TASK. И это происходит в том же процессе, то есть внутри приложения, например:

AppContext -> A(FLAG_ACTIVITY_NEW_TASK) -> B -> C; AppContext -> D(FLAG_ACTIVITY_NEW_TASK)

Согласно документации у нас сейчас 2 задачи:

Task 1: A, B, C; Task 2: D

Из документа следует, что для пользователя теоретически возможно переключиться либо на действие C, либо на действие D независимо, поскольку они принадлежат к различным задачам. Однако на практике я не смог переключиться на действие C - оно всегда переключалось на D.

Мой вопрос: Правда ли, что если задачи запущены в одном и том же процессе с FLAG_ACTIVITY_NEW_TASK, задачи не являются независимыми, и пользователь может переключиться только на самую верхнюю операцию в самой главной задаче?

Если ответ «нет» , то как пользователь может перейти к заданию 1?


UPDATE

Ответ: Нет
Задачи являются независимыми, и пользователь может самостоятельно переключаться между своими действиями, фактически имея две активности вашего приложения на вершине стека. Я только нашел вариант использования, спустя три года после того, как задал оригинальный вопрос.

Наше приложение регистрируется как обработчик для схемы URL (например, market://xxx.yyy/zzz). Теперь давайте представим, что пользователь запустил приложение с помощью средства запуска, занялся чем-то посередине (действия A, B, C) и остановился. Затем в браузере пользователь нажимает на URL, чтобы запустить нашу другую деятельность (операция D). Это приводит к двум задачам одновременно: действия A, B, CC сверху) и действие D. Пользователь может переключаться между этими двумя действиями через историю задач.

Забавно, что Activity C отображается в истории задач с собственным значком приложения, но Activity D отображается с помощью значка браузера. Независимо от того, оба могут быть переключены на.

Кроме того, обе задачи A-B-C и D выполняются в одном и том же процессе. Это означает, что все одиночные объекты и статические данные совместно используются ими. В результате они могут испортить состояние друг друга, если не принять меры предосторожности.

Ответы [ 3 ]

7 голосов
/ 31 мая 2011

Прошло некоторое время после того, как я задал этот вопрос, когда наткнулся на эту ссылку, которая я считаю очень полезной.Описывает все флаги и комбинации очень четко.

http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

0 голосов
/ 30 июля 2013

Я создал эталонный проект для решения этого точного варианта использования:

https://github.com/theelfismike/android-parallel-paths

0 голосов
/ 08 марта 2011

Я не думаю, что есть способ переключения задач (по сравнению с приложениями), выставленных пользователю. Вы можете перейти к другой задаче в коде, запустив соответствующую операцию.

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

...