Connect with us

Программирование

Как заменить стандартное окно сбоя своим экраном ошибки

То, что мы собираемся сделать, довольно просто.

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

/

     
     

Ошибки… Наши приложения иногда аварийно завершают работу по причинам, которых мы никогда не ожидали, несмотря на все меры предосторожности, которые мы принимаем против этого. Но вместо того, чтобы всегда показывать пользователю стандартное скучное диалоговое окно сбоя во время возникновения ошибки, замечательно было бы отобразить свой собственный экран, правда?

То, что мы собираемся сделать, довольно просто. Сначала мы создадим 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 в свой файл.

Как заменить стандартное окно сбоя своим экраном ошибки

Он показывает имя приложения красным цветом, как и ожидалось.

Как заменить стандартное окно сбоя своим экраном ошибки

Нажмите на лампочку и выберите Create class ‘App’

Как заменить стандартное окно сбоя своим экраном ошибки

Давайте вызовем наш метод Global Exception Handler.initialize

Все готово

Давайте запустим наше приложение и посмотрим на результаты.

Наш класс GlobalExceptionHandler работает, как и ожидалось! Вы также можете увидеть данные Throwable в логах.

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

Источник

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

Наши партнеры:

LEGALBET

Мобильные приложения для ставок на спорт
Telegram

Популярное

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

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