Закрытие (или полный выход с уничтожением процесса) по кнопке
alertDialogBuilder.setPositiveButton("ДА"){_,_ ->
//finish()
//android.os.Process.killProcess(android.os.Process.myPid())
//System.exit(1)
}
Как правильно выйти (закрыть, убить) из приложения? На метод finish() Android Studio ругается. На две другие строчки — нет, но понять вышло ли приложение или произошел crash с ошибкой не могу, так как в logcat ошибки нет:
MainActivity.kt:
class MainActivity : AppCompatActivity() { ..........
override fun onStart() {
super.onStart()
val btnExit: Button = findViewById<Button>(R.id.btnExit) as Button
btnExit.setOnClickListener {
this.exitSid()
}
MyFunctions.kt:
fun Context.exitSid() {
val alertDialogBuilder = AlertDialog.Builder(this)
alertDialogBuilder.setTitle("Выход из программы")
alertDialogBuilder.setIcon(R.drawable.appicon)
alertDialogBuilder.setMessage("Закрыть программу?")
alertDialogBuilder.setCancelable(false)
alertDialogBuilder.setPositiveButton("ДА"){_,_ ->
Toast.makeText(this,"Программа закрыта",Toast.LENGTH_SHORT).show()
//finishAndRemoveTask()
//finishAffinity()
//finish()
//[email protected]
android.os.Process.killProcess(android.os.Process.myPid())
System.exit(1)
}
}
Ответы (1 шт):
Метод finish() есть у активити, но не у контекста.
В программировании не получится написать что угодно и где угодно, и чтобы оно заработало.
Когда вы пишете finish() внутри вашей активити, то это эквивалентно:
this.finish()
Либо:
[email protected]()
Если вы хотите вызвать finish где-то еще, вне активности, то нужно передать объект activity, над которым вы хотите вызвать этот метод. Это не особенность Андроид или языка Котлин, а исходит просто из здравого смысла.
Так что если хотите, чтобы в вашей экстеншен-функции можно было вызвать finish, переделайте ее ресивер с Context на Activity:
fun Activity.exitSid() {
finish()
}
Без экстеншен-функции это выглядело бы так:
fun exitSid(activity: Activity) {
activity.finish()
}
А еще советую почитать основы, если вы не знали, что Activity это наследник Context.
