Site icon AppTractor

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

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

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

Последний шаг — создание объекта-компаньона и создание еще двух методов внутри.

Сбойная активити

Давайте продолжим нашу работу, создав нашу активити, которая будет отображаться после сбоя нашего приложения.

Мы создали нашу Crash Activity. Теперь займемся дизайном.

Вы можете проверить проект со всем содержимым здесь.

Наш дизайн готов. Следующий шаг — задать некоторые действия этим кнопкам. Вот так.

Мы назначили действия кнопкам, и последняя важная вещь, которую мы собираемся сделать, — это отделить процесс Main Application от Crash Activity, добавив одну строку в манифест. Таким образом, всякий раз, когда процесс нашего приложения завершается сбоем, Crash Activity не будет поражена этой ошибкой.

Тестируем

После завершения работ с активити ошибки, давайте создадим экран с простым дизайном, который и вызывает сбой приложения. Я отредактирую Main Activity, которая у нас уже есть.

Я буду использовать простой TextView и Button в качестве дизайна.

В коде я буду вызывать ошибку при нажатии кнопки.

Создание класса приложения

Если у вас нет класса приложения в вашем проекте. Откройте файл AndroidManifest, войдите внутрь тега приложения и добавьте строку android:name в свой файл.

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

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

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

Все готово

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

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

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

Источник

Exit mobile version