以getApplication()为上下文抛出“无法添加窗口标记空”的对话框

以getApplication()为上下文抛出“无法添加窗口标记空”的对话框

我的活动试图创建一个AlertDialog,它需要一个上下文作为参数。如果我使用:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

然而,我对使用“此”作为上下文持怀疑态度,因为即使在屏幕旋转之类的简单操作中,当活动被破坏和重新创建时,内存可能会泄漏。从Android开发者博客上的相关文章:

有两种简单的方法可以避免与上下文相关的内存泄漏。最明显的是避免在其自身范围之外逃避上下文。上面的例子显示了静态引用的情况,但是内部类及其对外部类的隐式引用可能同样危险。第二个解决方案是使用应用程序上下文。只要应用程序还活着,并且不依赖于活动生命周期,这个上下文就会存在。如果计划保留需要上下文的长寿对象,请记住应用程序对象。您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获得它。

但为了AlertDialog()两样getApplicationContext()getApplication()作为上下文可以接受,因为它引发异常:

“无法为应用程序添加窗口标记空”

参考资料:123

那么,这是否真的被认为是一个“bug”呢,因为官方建议我们使用Activity.getApplication()但却不像宣传的那样起作用?



慕姐8265434
浏览 446回答 3
3回答

撒科打诨

而不是getApplicationContext(),就用ActivityName.this.

繁华开满天机

使用this不是为我工作,但是MyActivityName.this做。希望这能帮助那些this去工作。

慕尼黑5688855

你可以继续使用getApplicationContext(),但在使用之前,您应该添加以下标志:dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT),错误将不会显示。将下列权限添加到清单中:<uses-permission&nbsp;android:name="android.permission.SYSTEM_ALERT_WINDOW"&nbsp;/>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android