Запрос профиля может не выполниться или не дать результатов сразу в следующих ситуациях:
- Ограничение частоты запросов. Сбор данных ограничивается, чтобы не снижать производительность устройства. Подробнее о том, как работает ограничение частоты запросов…
Завершение работы приложения до отправки. Если во время записи приложение закрывается или происходит сбой, система останавливает запись и сохраняет профиль в фоновом режиме, а затем отправляет результат из очереди при следующем запуске приложения (в активном или фоновом режиме) и регистрирует глобальный прослушиватель. Система сохраняет недоставленные результаты в очереди до семи дней, ожидая регистрации слушателя. Если ваше приложение не зарегистрирует слушателя в течение семи дней, результат в очереди будет удален.
Другие ошибки. Если сбор данных не удался (например, из-за недействительного запроса или внутренней ошибки),
ProfilingResultсообщает код ошибки и сообщение.
Как работает ограничение частоты запросов
Поскольку запись профилей требует значительных ресурсов, в ProfilingManager применяется ограничение частоты запросов как на уровне процесса, так и на уровне системы. Это позволяет поддерживать производительность устройства и время работы от батареи. Для разных типов профилей требуются разные ресурсы. Система отслеживает квоты в течение скользящих временных окон на двух уровнях:
- Ограничение частоты запросов. Отслеживает стоимость ресурсов профилей, собранных отдельным приложением, в соответствии с квотой для каждого приложения. Каждое приложение получает одинаковую квоту, и профилирование других приложений на устройстве не влияет на лимит вашего приложения. Если приложение исчерпает квоту за любой период времени, запросы будут отклоняться с ошибкой
ERROR_FAILED_RATE_LIMIT_PROCESS. - Ограничение частоты запросов на уровне системы. Отслеживает общую стоимость ресурсов профилей, собранных во всех приложениях на устройстве, в соответствии с общей глобальной квотой.
Поскольку все приложения вносят свой вклад в это ограничение на уровне устройства, запрос может завершиться ошибкой
ERROR_FAILED_RATE_LIMIT_SYSTEM, даже если ваше приложение не исчерпало собственную квоту процесса.
Управление количеством профилей в рабочей версии
Поскольку ограничения частоты запросов на уровне устройства зависят от типа профиля и общей активности системы, не пытайтесь отслеживать или прогнозировать точные квоты локальных ограничений частоты запросов в приложении. Вместо этого сосредоточьтесь на отправке запроса на профилирование, когда происходит соответствующий путь пользователя или отклонение, и позвольте ProfilingManager обрабатывать регулирование на устройстве.
Чтобы максимально расширить охват в полевых условиях, не увеличивая при этом пропускную способность загрузки и затраты на хранение, управляйте общим объемом профилей с помощью сегментации аудитории и платформ для экспериментов (например, удаленной конфигурации или флагов A/B-тестирования):
- Выборочное профилирование пользовательской базы. Включите профилирование для небольшого случайного процента пользовательских сеансов, а не запрашивайте профили у каждого пользователя при каждом запуске.
- Сегментирование по когортам. Вы можете настроить таргетинг на определенные версии приложения, уровни устройств, выпуски ОС или регионы, в которых вы исследуете регрессию. Например, можно включить сбор дампов кучи Java на устройствах с небольшим объемом ОЗУ, на которых часто возникает ошибка нехватки памяти.
- Сегментируйте триггеры и прямые запросы по пользователям. Назначьте разные триггеры профилирования и прямые запросы профилирования отдельным сегментам пользователей, чтобы одни пользователи записывали один профиль, а другие – другой. Поскольку все записи на устройстве используют одну и ту же квоту для каждого приложения, их изоляция по сегментам пользователей предотвращает исчерпание квоты, необходимой для менее частых записей на одном устройстве, из-за более частых триггеров или запросов.