Активность SingleTask, но открывается через два разных приложения

Это изображение было очень полезно для понимания функциональность, предлагаемая программой-модулем singleTask, взятой из здесь

enter image description here однако, я понял это в случае одного и того же заявления, у меня возникли проблемы с пониманием  что, если обе задачи принадлежат двум различным приложениям

Сбивающий сценарий (вымышленный),

  • Я просматривал приложение, и приложение предложило отправить электронной почты, я выбрал вариант "отправить электронную почту".
  • Будет выбрано мое приложение по умолчанию для электронной почты по умолчанию, и его активность (которая объявленная как синглетная маска).
  • Пока я печатал свой контент электронной почты, я переключился на какое-то приложение для чата и приложение разбилось и предложило мне возможность сообщить о проблеме по электронной почте разработчику, Теперь, когда я выберу "Отчет", мой адрес электронной почты приложение (которое является тем же самым приложением по умолчанию для электронной почты).

  • Теперь, когда роль корневого приложения электронной почты является синтаксической, мой контент который я написал, будет видна мне?

Главное, на этот раз задачи/стеки принадлежат двум различным приложениям.

Ответы

Ответ 1

Несмотря на то, что вы используете 2 разных приложения, он будет работать в ожидаемом пути:

  • Если ваша операция singleTask уже существует, эта копия будет использоваться с методом onNewIntent(), который называется
  • если он не существует, он будет запущен как обычно

Более технически, воспроизводя определение из вашей ссылки:

Система создает новую задачу и создает активность на корень новой задачи. Однако, если экземпляр активности уже существует в отдельной задаче, система направляет существующий экземпляр посредством вызова его метода onNewIntent(), скорее чем создание нового экземпляра. Только один экземпляр мероприятия может существуют за один раз.


Это легко проверить с помощью чтобы сделать задачу целью обмена текстом и singleTask в манифесте:

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>

Теперь добавьте несколько протоколов в методы onCreate() и onNewIntent() и выполните некоторые сценарии тестирования.


Что-то, что я нашел особенно полезным при тестировании различных макетов запуска, - это следующая команда ADB:

  • adb dumpsys activity activities

Это выводит много текста (это может помочь перезагрузить телефон перед тем, как сделать это - adb reboot), в котором указаны детали стеков задач деятельности. Это можно использовать, чтобы показать вам, что ваша деятельность singleTask "воссоздает" себя, когда она запускается через разные приложения.


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