27
使用getApplication()作为上下文的对话框抛出“无法添加窗口-令牌null不适用于应用程序”
我的活动试图创建一个AlertContext,它需要一个Context作为参数。如果我使用,这可以按预期工作: AlertDialog.Builder builder = new AlertDialog.Builder(this); 但是,我很乐意使用“ this”作为上下文,因为即使在诸如屏幕旋转之类的简单操作中销毁并重新创建Activity时,也可能会发生内存泄漏。摘自Android开发者博客上的相关文章: 有两种简单的方法可以避免上下文相关的内存泄漏。最明显的是避免将上下文转义超出其自身范围。上面的示例显示了静态引用的情况,但是内部类及其对外部类的隐式引用可能同样危险。第二种解决方案是使用Application上下文。只要您的应用程序处于活动状态且不依赖于活动生命周期,此上下文将一直存在。如果计划保留需要上下文的长期对象,请记住该应用程序对象。您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获得它。 但是对于AlertDialog()都不是getApplicationContext()或getApplication()不能作为上下文接受的情况,因为它引发了异常: “无法添加窗口-令牌null不适用于应用程序” 每引用:1,2,3,等等。 那么,这是真的应该被视为“错误” Activity.getApplication()吗,因为我们被正式建议使用,但它不能像宣传的那样起作用? 吉姆