我们知道匿名类维护对其封闭实例的引用,这可能导致 Android 上的上下文泄漏。
由于retrolambda将 lambda 向后移植到 Java7,因此值得一试。
似乎Java8 lambdas没有这个问题,但我找不到任何官方信息。
有什么线索吗?
我们知道匿名类维护对其封闭实例的引用,这可能导致 Android 上的上下文泄漏。
由于retrolambda将 lambda 向后移植到 Java7,因此值得一试。
似乎Java8 lambdas没有这个问题,但我找不到任何官方信息。
有什么线索吗?
Lambda 表达式和方法引用this
仅在需要时捕获对的引用,即this
直接引用或static
访问实例(非)成员时。
当然,如果你的 lambda 表达式捕获了一个局部变量的值,并且该值包含对它的引用,this
那么它也意味着引用this
……</p>
这是一些信息。
从以下链接http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html:这对内存管理有有益的影响:而内部类实例总是对其封闭保持强引用例如,不从封闭实例捕获成员的 lambda 不持有对它的引用。内部类实例的这种特性通常可能是内存泄漏的来源(所谓的失效侦听器问题)
您还可以从文本中看到http://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html :嵌套类:如果您的要求与本地类的要求相似,则使用它类型更广泛可用,并且您不需要访问局部变量或方法参数。
如果您需要访问封闭实例的非公共字段和方法,请使用非静态嵌套类(或内部类)。如果您不需要此访问权限,请使用静态嵌套类。