Android 对话框 Window 在方向更改期间泄漏

Android Dialog Window Leaked During Orientation Change

我在一个片段上显示了一个对话框,该对话框应该在异步任务完成执行时被关闭。一切正常,直到我在显示对话框时更改方向:我收到 Window 泄漏错误。我知道那是因为重新创建了 activity,而对话框是 'attached' 到旧的。我不能在清单上使用 android:configChanges="keyboardHidden|orientation|screenSize",因为我有不同的横向和纵向布局,所以我关闭了 onPause() 方法上的对话框,并在创建新的 activity 时再次重新创建它。但现在我有一个不同的问题:我的异步任务没有对新对话框的引用,所以它不能关闭它...

我已经用对话片段尝试过同样的事情,但问题仍然存在。

有办法解决这个问题吗?

谢谢。

我知道你说你不能使用 android:configChanges="keyboardHidden|orientation|screenSize" 因为你有不同的横向和纵向布局,但请看一下 Android documentation 关于 自己处理配置更改:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        setContentView(R.layout.landscapeLayout);
        //update your view elements, if any
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        setContentView(R.layout.portraitLayout);
        //update your view elements, if any
    }
}

这样您就可以保持不同的布局,并保留对对话框的引用