Программирование
Как заменить стандартное окно сбоя своим экраном ошибки
То, что мы собираемся сделать, довольно просто.
Ошибки… Наши приложения иногда аварийно завершают работу по причинам, которых мы никогда не ожидали, несмотря на все меры предосторожности, которые мы принимаем против этого. Но вместо того, чтобы всегда показывать пользователю стандартное скучное диалоговое окно сбоя во время возникновения ошибки, замечательно было бы отобразить свой собственный экран, правда?
То, что мы собираемся сделать, довольно просто. Сначала мы создадим Crash Activity и App Class. Затем с помощью одной строки, которую мы добавим в класс приложения, мы будем запускать нашу собственную Crash Activity всякий раз, когда наше приложение дает сбой.
Итак.. Начнем с самого сложного. Давайте создадим себе класс с именем GlobalExceptionHandler и ему потребуются три основных параметра. Также он должен быть расширен классом Thread.UncaughtExceptionHandler.
Мы собираемся запускать ActivityToBeLaunched всякий раз, когда наше приложение дает сбой, но нам нужно немного изменить Intent, чтобы запустить нашу активити, поэтому давайте создадим приватную функцию с именем launchActivity.
Теперь вернемся к методу uncaughtException и вызовем наш новый метод.
Функция defaultHandler.uncaughtException(p0, p1) вызывается всякий раз, когда при запуске Activity возникает какое-либо исключение. В этой ситуации вместо ActivityToBeLaunch появится диалоговое окно ошибки по умолчанию.
Gson зависимость
Она нам нужна, чтобы облегчить нашу работу. Добавьте такую строку в файл build.gradle(App).
implementation(“com.google.code.gson:gson:2.9.1”)
Последний шаг — создание объекта-компаньона и создание еще двух методов внутри.
- initalize: самая важная функция. Ее нужно запускать в функции OnCreate в классе Application. Она заменит ExceptionHandler по умолчанию на наш класс.
- getThrowableFromIntent: он будет извлекать данные Throwable из активити, которую мы собираемся использовать.
Сбойная активити
Давайте продолжим нашу работу, создав нашу активити, которая будет отображаться после сбоя нашего приложения.
Мы создали нашу Crash Activity. Теперь займемся дизайном.
Вы можете проверить проект со всем содержимым здесь.
Наш дизайн готов. Следующий шаг — задать некоторые действия этим кнопкам. Вот так.
Мы назначили действия кнопкам, и последняя важная вещь, которую мы собираемся сделать, — это отделить процесс Main Application от Crash Activity, добавив одну строку в манифест. Таким образом, всякий раз, когда процесс нашего приложения завершается сбоем, Crash Activity не будет поражена этой ошибкой.
Тестируем
После завершения работ с активити ошибки, давайте создадим экран с простым дизайном, который и вызывает сбой приложения. Я отредактирую Main Activity, которая у нас уже есть.
Я буду использовать простой TextView и Button в качестве дизайна.
В коде я буду вызывать ошибку при нажатии кнопки.
Создание класса приложения
Если у вас нет класса приложения в вашем проекте. Откройте файл AndroidManifest, войдите внутрь тега приложения и добавьте строку android:name в свой файл.
Все готово
Давайте запустим наше приложение и посмотрим на результаты.
Наш класс GlobalExceptionHandler работает, как и ожидалось! Вы также можете увидеть данные Throwable в логах.
Спасибо за чтение!
-
Новости1 месяц назад
Видеозвонки с Лили, Приключения и пианино — обновления Duolingo
-
Новости1 месяц назад
Видео и подкасты о мобильной разработке 2024.39
-
Видео и подкасты для разработчиков4 недели назад
Lua – идеальный встраиваемый язык
-
Новости1 месяц назад
Poolside, занимающийся ИИ-программированием, привлек $500 млн