Изменение поведения Android Lollipop
Согласно изменениям в Android Lollipop, ссылка:
Я ожидаю, что когда я запускаю активность другого приложения из моего приложения, оно должно открываться в новой задаче, даже если поведение по умолчанию (launchmode является стандартным). Итак, я сделал 2 тестовых приложения для проверки того же поведения. Но, что удивительно, другое приложение всегда открывается в задаче моего приложения, если не указан режим запуска. Я протестировал это на Xiaomi Redmi Note 3 (5.1.1), эмуляторе Marshmallow (x86), и поведение одинаково для обоих. Буду признателен за помощь в этом, а также за ссылку на сайт разработчика Android.
Некоторый код:
Launching app :
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
startActivity(intent);
break;
App to be launched :
<activity android:name="com.android.sample.launchdemo.ActivityB">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
При нажатии на кнопку запуска приложения запускается намерение и успешно открывается действие B, но в той же задаче. Заранее спасибо за любую помощь / предложения.
2 ответа
После просмотра документации у меня возникает ощущение, что стандартный режим работает так же, как и до Android 5.0 (Lollipop). Сообщение в блоге о сырной фабрике было единственным, в котором указывалось, что действие и даже в моем собственном опыте стандартные режимы запуска открывали действие в той же задаче, в которой оно было отправлено (если только не пропущены флаги намерений). Кто-то исправит меня, если я ошибаюсь, но в документации по Android не указано, что стандартный режим откроет новую задачу. Из документации Android:
"стандартный" (режим по умолчанию): система создает новый экземпляр действия в задаче, из которого оно было запущено, и направляет ему намерение. Действие может быть создано несколько раз, каждый экземпляр может принадлежать разным задачам, а одна задача может иметь несколько экземпляров. Смотрите полную документацию
Для того, что вы ищете, при стрельбе из Intent
Единственный способ гарантировать новое задание - использовать флаг FLAG_ACTIVITY_NEW_TASK
, Вы можете установить это, позвонив либо intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK)
или же intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
(последний предназначен для объединения флагов вместе, потому что этот метод возвратит намерение).
После дополнительных исследований единственное изменение (касающееся этого), которое, по-видимому, сделано в Android 5.0 Lollipop, заключается в том, что на экране недавних приложений может отображаться несколько экземпляров действия.
В предыдущих выпусках экран недавних сообщений мог отображать только одну задачу для каждого приложения, с которым пользователь взаимодействовал в последнее время. Теперь ваше приложение может открывать больше задач по мере необходимости для дополнительных одновременных действий с документами. Эта функция облегчает многозадачность, позволяя пользователям быстро переключаться между отдельными действиями и документами с экрана последних, обеспечивая согласованное переключение между всеми приложениями. Примерами таких одновременных задач могут быть открытые вкладки в приложении веб-браузера, документы в приложении для повышения производительности, одновременные совпадения в игре или чаты в приложении обмена сообщениями.
Мне кажется, что это единственное изменение, касающееся поста (сырного завода и ТАК). documentLaunchMode
набор для создания новых заданий для каждого вида деятельности (что вполне может иметь место, если учесть, что на сырном заводе есть приложение "Галерея"). Документация по параллельным документам и documentLaunchMode. documentLaunchMode
и флаг FLAG_ACTIVITY_NEW_TASK
может быть настроен на аналогичные вещи documentLaunchMode
является предпочтительным.
Я нашел документацию ниже.
https://developer.android.com/guide/components/activities/recents.html
=> когда пользователь использует свой браузер и нажимает "Поделиться"> Gmail. Появится экран "Создать" приложения Gmail. При нажатии на кнопку "Последние" в это время Chrome и Gmail работают как отдельные задачи. В более низких версиях Android все действия отображаются как одна задача, что делает кнопку "Назад" единственным средством навигации. На рисунке 2 показано, как выглядит экран "Недавние" в Android 5.0 и выше по сравнению с более низкими версиями платформы. Изображение на левом экране для Android 5.0 и выше, а изображение справа показывает, как оно выглядит в более низких версиях Android.
и обратитесь к следующей ссылке. Lollipop: заставить мою активность остаться в задаче, которая запустила намерение поделиться
=> По умолчанию launchMode myfirstapp.MainActivity является "стандартным", и никакие флаги намерений не были установлены. Но после того, как myfirstapp.MainActivity запускается через действие общего доступа Альбома, флаг намерения содержит FLAG_ACTIVITY_MULTIPLE_TASK, FLAG_ACTIVITY_NEW_DOCUMENT.
Когда действие запускается через общий ресурс, действие, которое содержит общий ресурс на своей панели инструментов, просто устанавливает Intent для своего ShareActionProvider, а затем ShareActionProvider запускает действие с этим Intent - в данном случае myfirstapp.MainActivity.
Поэтому я думаю, что из Lollipop система начинает новую задачу для действия из другого приложения, у которого launchMode является "стандартным", только когда действие запускается через действие общего доступа.