34

匿名クラスは、それを囲むインスタンスへの参照を維持し、これが Android でのコンテキスト リークにつながる可能性があることがわかっています。

retrolambdaはラムダを Java7 にバックポートするため、試してみる価値があります。

Java8ラムダにはこの問題はないようですが、それに関する公式情報は見つかりません。

どんな手掛かり?

4

2 に答える 2

21

ここにいくつかの情報があります。

次のリンクからhttp://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html : これはメモリ管理に有益な意味を持ちます: 内部クラスのインスタンスは常にそれらを囲むものへの強い参照を保持しますインスタンス、囲んでいるインスタンスからメンバーをキャプチャしないラムダは、それへの参照を保持しません。内部クラス インスタンスのこの特性は、多くの場合、メモリ リーク (いわゆる経過リスナーの問題) の原因となる可能性があります。

テキストからhttp://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.htmlも参照でき ます。この型はより広く利用可能であり、ローカル変数やメソッド パラメーターへのアクセスは必要ありません。

外側のインスタンスの非パブリック フィールドおよびメソッドへのアクセスが必要な場合は、非静的ネスト クラス (または内部クラス) を使用します。このアクセスが必要ない場合は、ネストされた静的クラスを使用してください。

于 2015-02-11T05:10:27.903 に答える