#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
классе, чтобы инкапсулировать уродливую попытку / уловку.