【问题标题】:BadTokenException even if I check if Activity isFinishing()BadTokenException 即使我检查 Activity isFinishing()
【发布时间】:2016-12-24 03:19:32
【问题描述】:

如果发生错误,我的Activity 中有以下代码以显示警告Dialog

private void showConfigError() {
        if (!isFinishing()) {
            new AlertDialog.Builder(this)
                    .setMessage(R.string.start_failed)
                    .setCancelable(false)
                    .setPositiveButton(*/.../*)
                    .setNegativeButton(*/.../*)
                    .create()
                    .show();
        }
    }

如您所见,在显示Dialog 之前,我会检查Activity 是否仍在运行。但尽管如此,我的崩溃日志显示,有时在程序的这一部分会发生BadTokenException。现在我问自己这怎么会发生?!是否存在Activity 可以返回isFinishing() == false 但不再处于活动状态的状态?

【问题讨论】:

    标签: android android-activity dialog crash


    【解决方案1】:

    试试这个代码

        private void showConfigError() {
        if (isFinishing()) return; 
    
        new AlertDialog.Builder(this)
                    .setMessage(R.string.start_failed)
                    .setCancelable(true)        // let system kills it.
                    .setPositiveButton(*/.../*)
                    .setNegativeButton(*/.../*)
                    .create()
                    .show();
    
       }
    

    【讨论】:

    • 什么都不做和只是'返回'有什么区别?
    • 这是在 isFinishing() 检查和系统尝试关闭对话框但您将其设置为 setCancelable(false) 后可能会终止活动的机会
    • 但不幸的是,此对话框要求不可取消
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多