Есть ли обходной путь для метода reportFullyDrawn()?

#android

#Android

Вопрос:

Я пытаюсь измерить время запуска приложения, и документально reportFullyDrawn() оформленное решение сообщает о времени, которое я ищу.

https://developer.android.com/topic/performance/launch-time.html

https://developer.android.com/reference/android/app/Activity.html#reportFullyDrawn ()

Оказывается, что при включении runtime reportFullyDrawn() метод выдает исключение

 "java.lang.SecurityException: uid 10156 does not have android.permission.UPDATE_DEVICE_STATS".
  

Кроме того, приложение не сообщает автоматически о времени запуска в виде строки « Displayed » в журнале (как и должно быть, если я не ошибаюсь).

Я нигде не нашел упоминания об этой проблеме. Это случилось с кем-то еще? Есть ли обходной путь для этого?

Комментарии:

1. Для тех, кому интересно, это исключение не происходит после KitKat 4.4 (по словам Сирила Моттье), так что это не проблема, если minSdkVersion> = 21

2. Вы также получаете исключение SecurityException при входе в управляемый профиль (android для работы). Это наблюдается, по крайней мере, на устройствах Samsung с Android 6-9, поэтому кажется хорошей идеей всегда вызывать reportFullyDrawn() в блоке try-catch.

3. @mattlaabs да, я также испытываю это на Android 6-9. Спасибо за предупреждение, что это связано с Android для работы.

Ответ №1:

Вам просто нужно перехватить исключение. Метод работает, но, к сожалению, он выдает SecurityException . Это невозможно исправить.

Здесь, в этой презентации, упоминается та же проблема с элегантным решением. https://speakerdeck.com/cyrilmottier/launch-screens-from-a-tap-to-your-app

Точно так же, как Compat классы в библиотеке поддержки Android, он оборачивает исправление в статический метод в Compat классе, чтобы инкапсулировать уродливую попытку / уловку.