Среда выполнения SDK накладывает ограничения на то, как SDK могут запускать новые действия. Это создает проблему для полноэкранных форматов рекламы, которые обычно требуют запуска отдельного действия для улучшения контроля и удобства пользователей. Чтобы решить эту проблему, в SDK Runtime представлен новый механизм изолированных действий.
 Пакеты SDK, загруженные в среду выполнения SDK, не могут напрямую определять теги <activity> в своем манифесте или инициировать свои собственные действия. Вместо этого вводится новое действие намерения START_SANDBOXED_ACTIVITY .
Хотя SDK также не могут запускать намерения с помощью этого действия, SDK могут запросить клиентское приложение инициировать это намерение. Затем система создает определяемое платформой действие и передает его в SDK. Это действие будет выполняться в том же процессе, что и SDK.
Затем SDK может использовать это действие для реализации полноэкранной рекламы и управления ею.
 Действие, предоставляемое платформой, представляет собой стандартную android.app.Activity , запускаемую как часть задачи клиентского приложения.
Создание активности в среде выполнения SDK
У вас есть два основных метода создания действий: использование оптимизированных библиотек действий Jetpack или прямое взаимодействие с API-интерфейсами платформы .
Мы рекомендуем использовать библиотеки действий, поскольку они упрощают создание действий, абстрагируя основную сложность.
Библиотеки действий
Библиотеки действий предоставляют несколько преимуществ:
- Абстрагируйте внутренние детали регистрации обработчиков действий и обмена их идентификаторами с клиентскими приложениями.
- Предоставляет разработчикам приложений больше контроля над тем, как пакеты SDK создают действия в своих приложениях, позволяя им устанавливать условия (предикаты), которые должны выполняться.
- Создайте для SDK единый способ определения API, запускающих действия.
Существует три библиотеки действий: ядро, клиент и поставщик.
- Основная библиотека предоставляет интерфейсы, используемые клиентскими приложениями и библиотеками поставщиков.
- Библиотека поставщика предоставляет API для SDK для запуска действий.
- Клиентская библиотека предоставляет API-интерфейсы для клиентских приложений для создания средства запуска действий, которое SDK может использовать для запроса приложений на запуск действий.
Эти библиотеки представляют следующие API:
-  SdkActivityLauncher: средство запуска действий позволяет SDK обрабатывать запуск действий из клиентского приложения. Клиентские приложения должны создать средство запуска и передать его в качестве параметра API-интерфейсам SDK, которые запускают действия.
-  <T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ): функция расширения, которую клиентское приложение может вызывать из своих действий для создания средств запуска.
-  SdkActivityLauncher.launchSdkActivity(IBinder): метод, используемый SDK для запроса приложения на запуск действий.
Последовательность запуска действий с библиотеками действий выглядит следующим образом:
-  SDK добавляет параметр типа SdkActivityLauncherко всем API, которые запускают действия.
-  Клиентское приложение вызывает createSdkActivityLauncherв одном из своих действий, чтобы создать средство запуска, которое можно передать в SDK при вызовах API.
-  SDK вызывает SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)и получает токен идентификатора.
-  SDK вызывает launchSdkActivityдля запуска действия.
На следующей диаграмме показан порядок действий в случае использования библиотек действий.
API платформы
Платформа представляет следующие API-интерфейсы для облегчения создания и управления изолированными действиями в среде выполнения SDK:
-  SdkSandboxActivityHandler: обработчик активности используется для уведомления SDK о создании действия и его регистрации в SDK.
-  Чтобы помочь с регистрацией обработчиков активности, SDK может использовать следующие методы в SdkSandboxController:-  .registerSdkSandboxActivityHandler(SdkSandboxActivityHandler): регистрирует экземплярSdkSandboxActivityHandler, который возвращает идентификаторIBinder.
-  .unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler): отменяет регистрацию зарегистрированного экземпляраSdkSandboxActivityHandler, используя его идентификатор.
 
-  
-  SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): вызываемый из клиентского приложения, этот метод запускает создание действий для SDK. Клиентское приложение должно передать в качестве параметров выбранное им начальное действие и идентификатор обработчика активности SDK.
Чтобы начать действие с использованием API платформы, SDK должны следовать следующему алгоритму:
- SDK регистрирует обработчик активности с помощью предоставленных API и получает идентификатор.
- SDK разделяет этот идентификатор со своим клиентским приложением.
-  Клиентское приложение вызывает метод для запуска действия в среде выполнения SDK с помощью API платформы startSdkSandboxActivity(Activity, IBinder), передавая в качестве параметров выбранное начальное действие для этого нового действия и идентификатор обработчика действия.
-  Платформа запускает действие и уведомляет SDK посредством обратного вызова в обработчике действия ( SdkSandboxActivityHandler.onActivityCreated(Activity)).
- SDK использует это действие для заполнения его рекламой.
Использование API-интерфейсов платформы возлагает на SDK ответственность за передачу идентификатора SdkSandboxActivityHandler клиентскому приложению через его API-интерфейсы в соответствующее время и предоставление клиентским приложениям инструкций по его использованию.
 На следующей блок-схеме в примере SDK есть метод launchActivity(AppCallback) который ожидает обратного вызова (определенного как часть API SDK). Этот обратный вызов используется SDK для обмена идентификатором обработчика активности ( SdkSandboxActivityHandler ) с клиентским приложением. 
Видимость
В среде выполнения SDK объявления, интегрированные в иерархию представлений клиентского приложения, используют побочные каналы для рендеринга представлений SDK из процесса SDK в процесс клиентского приложения.
SDK не может использовать те же API-интерфейсы представления, которые они используют вне среды выполнения SDK, чтобы определить, видно ли объявление пользователю, поскольку представление объявления не привязано к окну приложения ( Viewability ).
 Напротив, действия, предоставляемые платформой, выполняются изначально в процессе выполнения SDK, что устраняет необходимость в побочных каналах и позволяет SDK использовать стандартные API-интерфейсы Android Activity и View .
Из-за этих различных реализаций постоянные усилия направлены на унификацию интерфейсов для получения сигналов видимости независимо от контекста загрузки рекламы.
Жизненный цикл
 ActivityHolder , передаваемый в SDK через SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) реализует LifecycleOwner и может использоваться для получения сведений о Lifecycle.Event .
Обратная навигация
 Метод ActivityHolder.getOnBackPressedDispatcher() возвращает OnBackPressedDispatcher , который можно использовать для регистрации экземпляров OnBackPressedCallback для обработки обратной навигации.