Обработка ошибок в классе приложенияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обработка ошибок в классе приложения

Сообщение Anonymous »

У меня есть приложение для Android с большей частью моей логики, написанной в C ++, а котлин используется для пользовательского интерфейса или взаимодействия с SDK Android. Чтобы отобразить предупреждение, информирующая пользователя о шагах исправления. AlertDialog используется для информирования пользователя. < /P>

Код: Выделить всё

// In Activity class
public fun displayAlert() {

log("MainActivity.displayAlert()")

val builder: AlertDialog.Builder = AlertDialog.Builder(MainApplication.sForeGroundActivity)

builder.setTitle("PANIC")
builder.setMessage("Something went wrong!!")
builder.setCancelable(false)
builder.setPositiveButton("Restart") { _, _ ->
log("Restart the app...")
}

builder.setNegativeButton("Cancel") { _, _ ->
log("Cancel!")
}

val alertdialog: AlertDialog = builder.create()
alertdialog.show()
}
Но что, если в классе приложения возникает ошибка ? Приведенный выше метод не может быть использован, потому что AlertDialog.Builder нуждается в активности контекст.

Возможно, можно отложить отображение ошибки до тех пор, пока не будет запущена активность . Один из способов достижения этого-использовать статическую переменную для записи, произошла ли ошибка или нет ... если ошибка произошла в классе приложения , может быть, если во всех методах жизненного цикла всех методов жизни S, чтобы не выполнять свою логику, а отображать предупреждение в методе Activity oncreate . Другой способ - «публиковать» событие в главном потоке ... это наблюдение, что всякий раз, когда событие «размещено», оно всегда поднимается после того, как активность вызывается.
Вот пример сбоя в методе приложения oncreate . Библиотека C ++ загружена и в JNI_ONLOAD , классы JNI и методы, которые позже необходимы для JNI, загружаются.

Код: Выделить всё

class MainApplication : Application() {

override fun onCreate() {

log("MainApplication.onCreate()")
super.onCreate()

try {
// Loading our Native Library
System.loadLibrary("androidfailureresponse")
} catch (pException: UnsatisfiedLinkError) {
log(pException.toString())

log("Posting an error screen event!")
Handler(Looper.getMainLooper()).post {

log("About to display an error screen!")

// This is invoked on the Main thread
MainActivity.displayAlert()
}
}
}

companion object {
public var sForeGroundActivity: Activity? = null
}
}
Когда jni_onload сбой с jni_err , блок улова используется. не задокументирован. Это было только наблюдение, что событие, опубликованное в основной потоке, вызвано после запуска активности . UF Метод события поднимается сразу после приложения oncreate , вышеупомянутый способ «публиковать» событие не сработает.
Есть ли элегантный способ справиться с сбоем, когда активность Контекст недоступен? Ошибки в этом коде в идеале должны быть решены при тестировании, но в Application происходит много других вещей. Oncreate . Вся инициализация, которая требуется для приложения, происходит здесь. В дополнение к деятельности, существуют следующие компоненты: < /p>
  • Существует appwidgetprovider < /code> для опыта виджета < /li>
    < li> Существует FireBaseService для опыта уведомления. /li>
Инициализация общего уровня приложения (например, инициализация объектов C ++) происходит в Application.oncreate .

Подробнее здесь: https://stackoverflow.com/questions/794 ... tion-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»