Connect with us

Разработка

Анализ сведений о запуске и завершении приложений в Android 15

С помощью этих данных можно проследить, как пользователи используют приложение. С помощью данных о выходе можно было проверить, не осталось ли в приложении проблем с выходом, а теперь и то, нет ли проблем с входом.

Опубликовано

/

     
     

В Android 11 появилась ApplicationExitInfo, из которой можно узнать исторические причины, по которым приложение было выключено/завершено.

В Android 15 реализована новая ApplicationStartInfo, которую можно использовать для анализа причин того, почему и как приложение было запущено.

С помощью этих данных можно проследить, как пользователи используют приложение. С помощью данных о выходе можно было проверить, не осталось ли в приложении проблем с выходом, а теперь и то, нет ли проблем с входом.

ApplicationStartInfo

Как уже было сказано, ApplicationStartInfo была представлена в Android 15, поэтому она будет доступна только для устройств с API 35 и выше. Поэтому обязательно используйте соответствующую обработку версий или пометьте все методы с помощью @RequiresApi(api = Build.VERSION_CODES.VANILLA_ICE_CREAM).

Чтобы получить доступ к данным о стартах вам нужно сделать следующее:

Получите ActivityManager из системных служб и с его помощью извлеките столько исторических данных, сколько их доступно в хранилище.

Доступные данные:

  • Причина запуска — уведомление, пользователь нажал на иконку в лаунчере, будильник…
  • Состояние запуска — состояние, в котором приложение находится в данный момент — ошибка, запущено, первый кадр
  • Тип запуска — холодная загрузка, теплая загрузка…
  • Режим запуска — способ повторного использования или замены текущей активити — singleInstance, singleTask, singleTop, standard…
  • Принудительная остановка — если запуск является первым с тех пор, как приложение было принудительно остановлено
  • Интент — намерение, использованное для запуска активности
  • Время запуска — карта временных меток событий во время запуска в наносекундах

Большинство значений — целые числа, которые определены как статические целочисленные константы в ApplicationStartInfo.

Добавляем колбек

Вы можете добавить функцию обратного вызова, чтобы получать информацию, когда приложение полностью запущено, и получать информацию о запуске сразу, без запроса истории. Она возвращает список ApplicationStartInfo.

Добавляем события

Вы можете добавлять свои события в историю с помощью своего набора констант, которые должны быть больше 20 (START_TIMESTAMP_RESERVED_RANGE_SYSTEM) и меньше или равны 30 (START_TIMESTAMP_RESERVED_RANGE_DEVELOPER), согласно документации.

Время указывается в наносекундах.

System.nanoTime() не ссылается на временные метки Unix, но если у вас есть 2 или более временных меток, это дает вам более детальное представление о производительности.

ApplicationExitInfo

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

Работает почти так же, но вам нужно указать имя пакета из контекста, а также идентификатор процесса (PID), который можно оставить равным 0 для всех записей, и максимальное количество причин выхода, которые нужно получить.

Доступные данные:

  • Причина выхода — причина, по которой приложение было остановлено
  • Описание — человекочитаемая причина, по которой приложение было остановлено
  • Важность выхода — насколько важным было приложение, когда оно было остановлено — передний план, дремота…
  • Время остановки — временная метка в миллисекундах, когда приложение было остановлено

Причины выхода — это опять же в основном статические константные целые числа, определенные в ApplicationExitInfo и ActivityManager.RunningAppProcessInfo.

Пример использования

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

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

Пример для начала:

Аналогичным образом мы можем создать класс данных для отображения временных меток из стартовой информации:

Или мы можем определить причины выхода:

Не стесняйтесь заменить throw каким-либо значением по умолчанию, если хотите.

Аналогично с другими параметрами вы можете создавать дополнительные перечисления или другие классы данных по своему усмотрению. Для получения более подробной информации посетите документацию — ApplicationStartInfo и ApplicationExitInfo.

Полный пример приложения можно найти в моем репозитории.

Спасибо за чтение!

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: