为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐8265434 2019-07-05 10:18:10
以getApplication()为上下文抛出“无法添加窗口标记空”的对话框我的活动试图创建一个AlertDialog,它需要一个上下文作为参数。如果我使用:AlertDialog.Builder builder = new AlertDialog.Builder(this);然而,我对使用“此”作为上下文持怀疑态度,因为即使在屏幕旋转之类的简单操作中,当活动被破坏和重新创建时,内存可能会泄漏。从Android开发者博客上的相关文章:有两种简单的方法可以避免与上下文相关的内存泄漏。最明显的是避免在其自身范围之外逃避上下文。上面的例子显示了静态引用的情况,但是内部类及其对外部类的隐式引用可能同样危险。第二个解决方案是使用应用程序上下文。只要应用程序还活着,并且不依赖于活动生命周期,这个上下文就会存在。如果计划保留需要上下文的长寿对象,请记住应用程序对象。您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获得它。但为了AlertDialog()两样getApplicationContext()或getApplication()作为上下文可以接受,因为它引发异常:“无法为应用程序添加窗口标记空”参考资料:1, 2, 3等那么,这是否真的被认为是一个“bug”呢,因为官方建议我们使用Activity.getApplication()但却不像宣传的那样起作用?
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-07-05
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-07-05
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

你可以继续使用getApplicationContext(),但在使用之前,您应该添加以下标志:dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT),错误将不会显示。

将下列权限添加到清单中:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 445 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信