アクティビティ内での内部クラスの安全な使用:
内部クラスの有効期間がコンテナ クラス (アクティビティ) の有効期間を超えると、メモリ リークのリスクが生じる可能性があります。 )Androidでは。これは、外部クラスが破棄または再作成された後で、外部インスタンスが内部インスタンスを参照する場合に発生する可能性があります。
例 1 (安全):
この例では、匿名内部クラスはメソッドのスコープ内で定義されており、アクティビティへの長期間有効な参照を維持しません。したがって、リークセーフです:
final Dialog dialog = new Dialog(this); // ... dialog.show();
例 2 (危険):
この例では、Handler で実行される Runnable に匿名の内部クラスを使用します。 Runnable はアクティビティのフィールドを参照するため、アクティビティよりも存続し、その参照が維持され、メモリ リークが発生する可能性があります:
_handlerToDelayDroidMove = new Handler(); _handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000); // ... private Runnable _droidPlayRunnable = new Runnable() { public void run() { _someFieldOfTheActivity.performLongCalculation(); } };
いつ内部クラスが外部クラスよりも存続できるのか?
以下の場合、内部クラスは外部クラスよりも存続する可能性があります。
アクティビティとビューのリーク:
実行可能リーク:
ベスト プラクティス:
以上がAndroid アクティビティで内部クラスを使用するときにメモリ リークを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。