Android で匿名の内部クラスを安全に使用できる場合
内部クラスのメモリ リーク
Android では、内部クラスが外部クラスよりも存続するときにメモリ リークが発生します。これは、内部クラスが外部クラスへの強い参照を直接または別のオブジェクトを通じて間接的に保持している場合に発生する可能性があります。
匿名内部クラスを使用する安全な状況
使用アクティビティ内の匿名内部クラスは、一般に次の場合に安全です。
Safe の例匿名内部クラス
質問で提供したコード サンプルは、安全な匿名内部クラスの例です。
// This is safe because the anonymous class is a short-lived callback okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } });
匿名内部クラスを使用する危険な状況
アクティビティ内で匿名の内部クラスを使用すると危険な可能性がありますwhen:
危険な匿名内部クラスの例クラス
次のコード サンプルは、危険な匿名内部クラスを示しています。
// This is dangerous because _droidPlayRunnable holds a long-lived reference to _someFieldOfTheActivity _handlerToDelayDroidMove = new Handler(); _handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000); private Runnable _droidPlayRunnable = new Runnable() { public void run() { _someFieldOfTheActivity.performLongCalculation(); } };
アクティビティのライフサイクルと内部クラスについて
Android アクティビティいつ作成、再開、一時停止、破棄されるかを決定するライフサイクルがあります。アクティビティが破棄されると、その内部状態は失われます。これには、アクティビティ内の内部クラスへの参照が含まれます。
メモリ リークからの保護
匿名の内部クラスでのメモリ リークを回避するには、次のことが重要です。
以上がAndroid で匿名内部クラスを使用しても安全なのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。