我的Activity试图创建一个需要Context作为参数的AlertDialog。如果我使用以下代码,则可以正常工作:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
然而,我对使用"this"作为上下文感到不安,因为即使在像屏幕旋转这样简单的事情中,Activity被销毁和重新创建时可能会出现内存泄漏的风险。来自Android开发者博客上一篇相关文章的说法如下:
但是,对于有两种简单的方法可以避免上下文相关的内存泄漏。最明显的方法是避免将上下文从其自身的范围之外逃逸。上面的示例显示了静态引用的情况,但是内部类及其对外部类的隐式引用同样危险。第二个解决方案是使用Application上下文。此上下文将与应用程序一起存在,并且不依赖于活动生命周期。如果您计划保留需要上下文的长期对象,请记住应用程序对象。您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获取它。
AlertDialog()
,无论是getApplicationContext()
还是getApplication()
都不可接受作为上下文,因为它会抛出异常:
相关参考:1,2,3等。"Unable to add window — token null is not for an application”
那么,既然我们被官方建议使用
Activity.getApplication()
,但实际上它没有按照广告所说的正常工作,那么这真的应该被认为是一个“bug”吗?Jim