Код: Выделить всё
// 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()
}
Возможно, можно отложить отображение ошибки до тех пор, пока не будет запущена активность . Один из способов достижения этого-использовать статическую переменную для записи, произошла ли ошибка или нет ... если ошибка произошла в классе приложения , может быть, если во всех методах жизненного цикла всех методов жизни 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
}
}
Есть ли элегантный способ справиться с сбоем, когда активность Контекст недоступен? В идеале они должны быть решены при тестировании, но в Application происходит много других вещей. Oncreate . Вся инициализация, которая требуется для приложения, происходит здесь. Application.oncreate is:
- Существует appwidgetprovider для опыта виджета
Существует FireBaseService для опыта уведомления. >
Подробнее здесь: https://stackoverflow.com/questions/794 ... tion-class
Мобильная версия