首页 > 解决方案 > 在kotlin中回压时出现对话框,内存泄漏?

问题描述

我想在单击一次后退按钮时发出警报对话框,但发生了错误。搜索错误,我发现我必须使用dismiss()。所以我做了但没有工作。你能让我知道这个问题吗?这是错误日志。

E/WindowManager: android.view.WindowLeaked: Activity com.jakchang.hwahae.Activity.MainActivity has leaked window DecorView@85feca8[MainActivity] that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:701)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:365)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
        at android.app.Dialog.show(Dialog.java:470)
        at com.jakchang.hwahae.Activity.MainActivity.exitDialog(MainActivity.kt:183)
        at com.jakchang.hwahae.Activity.MainActivity.onBackPressed(MainActivity.kt:167)
        at android.app.Activity.onKeyUp(Activity.java:3168)
        at android.view.KeyEvent.dispatch(KeyEvent.java:3374)
        at android.app.Activity.dispatchKeyEvent(Activity.java:3451)
        at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:115)
        at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:84)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:133)
        at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:535)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
        blabla~
    override fun onBackPressed() {
        super.onBackPressed()
        exitDialog()
    }



    private fun exitDialog() {  
        val builder = AlertDialog.Builder(this)

        builder.setMessage("Close?")

        builder.setPositiveButton("YES") {dialog, id ->
            finish()
        }
        builder.setNegativeButton("NO") {dialog, id ->
            dialog.dismiss()
        }
        builder.create().show()
        //builder.show()

    }

标签: android

解决方案


你应该在 super.onBackPressed() 之前调用 exitDialog() 函数。您所做的是在 exitDialog() 之前调用 super.onBackPressed() ,这意味着您的活动不再存在。请更改为我发布的代码。

覆盖乐趣 onBackPressed() { exitDialog() }

private fun exitDialog() {  
    val builder = AlertDialog.Builder(this)

    builder.setMessage("Close?")

    builder.setPositiveButton("YES") {dialog, id ->
        super.onBackPressed()
    }
    builder.setNegativeButton("NO") {dialog, id ->
        dialog.dismiss()
    }
    builder.create().show()
    //builder.show()

}

推荐阅读