以getApplication()为上下文抛出“无法添加窗口标记空”的对话框我的活动试图创建一个AlertDialog,它需要一个上下文作为参数。如果我使用:AlertDialog.Builder builder = new AlertDialog.Builder(this);然而,我对使用“此”作为上下文持怀疑态度,因为即使在屏幕旋转之类的简单操作中,当活动被破坏和重新创建时,内存可能会泄漏。从Android开发者博客上的相关文章:有两种简单的方法可以避免与上下文相关的内存泄漏。最明显的是避免在其自身范围之外逃避上下文。上面的例子显示了静态引用的情况,但是内部类及其对外部类的隐式引用可能同样危险。第二个解决方案是使用应用程序上下文。只要应用程序还活着,并且不依赖于活动生命周期,这个上下文就会存在。如果计划保留需要上下文的长寿对象,请记住应用程序对象。您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获得它。但为了AlertDialog()两样getApplicationContext()或getApplication()作为上下文可以接受,因为它引发异常:“无法为应用程序添加窗口标记空”参考资料:1, 2, 3等那么,这是否真的被认为是一个“bug”呢,因为官方建议我们使用Activity.getApplication()但却不像宣传的那样起作用?
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
getApplicationContext()
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- 3 回答
- 0 关注
- 445 浏览
添加回答
举报
0/150
提交
取消