我的活动正在尝试创建一个需要上下文作为参数的警报对话框。如果我使用:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
然而,我对使用“this”作为上下文持谨慎态度,因为即使在屏幕旋转等简单的过程中,当活动被销毁和重新创建时,也有可能发生内存泄漏。从Android开发者博客上的相关文章:
有两种简单的方法可以避免上下文相关的内存泄漏。最明显的一种是避免转义上下文超出其自身范围。上面的例子展示了静态引用的情况,但内部类及其对外部类的隐式引用可能同样危险。第二个解决方案是使用Application上下文。只要你的应用程序还活着,这个上下文就会存在,并且不依赖于活动的生命周期。如果你打算保留需要上下文的长生命周期对象,请记住应用程序对象。你可以通过调用Context.getApplication ationContext()或Activity.getApplication()轻松获取它。
但是对于AlertDialog()
,getApplicationContext()
或getApplication()
都不能作为Context接受,因为它抛出了异常:
“无法添加窗口-令牌null不适用于应用程序”
那么,这真的应该被认为是一个“bug”,因为我们被正式建议使用Activity.getApplication()
,但它并没有像宣传的那样起作用吗?
吉姆