使用getApplicationContext()显示对话框 - BadTokenException:无法添加窗口

3
我知道这个可能已经在这里讨论过了。但我仍然不确定如果我使用getApplicationContext()来显示一个Dialog会发生什么。
我有一个应用程序,它使用getApplicationContext()创建AlertDialog.Builder,当显示对话框时,应用程序会崩溃。但如果我使用SomeActivity.this的上下文,它就可以正常工作。
注意:这个应用程序已经在应用商店中运行一段时间了,在此之前是可以正常工作的,但不确定从哪个Android版本开始出现崩溃。
崩溃堆栈跟踪
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:540)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
        at android.app.Dialog.show(Dialog.java:286)
        at android.app.AlertDialog$Builder.show(AlertDialog.java:951) 
1个回答

13

但如果我使用getApplicationContext()来显示对话框会发生什么呢?

程序将会崩溃。

但如果我使用SomeActivity.this中的context就能正常工作。

正确。一个Dialog归属于某个Activity你不能使用ApplicationService或其他Context来显示Dialog。不过请注意,你可以使用任何Context启动一个类似对话框的Activity。

但我不确定从哪个Android版本开始会出现此问题

根据我所知,这个问题从Android 1.0版本开始就存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接