何时在 Android 中安全使用匿名内部类
内部类内存泄漏
在 Android 中,当内部类的寿命超过其外部类的寿命时,就会发生内存泄漏。当内部类直接或通过另一个对象间接持有对外部类的强引用时,就会发生这种情况。
使用匿名内部类的安全情况
使用Activity 中的匿名内部类在以下情况下通常是安全的:
安全示例匿名内部类
您在问题中提供的代码示例是安全匿名内部类的示例:
// This is safe because the anonymous class is a short-lived callback okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } });
使用匿名内部类的危险情况
在 Activity 中使用匿名内部类可能很危险当:
危险示例匿名内部类
以下代码示例说明了危险的匿名内部类:
// 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(); } };
了解 Activity 生命周期和内部类
Android 活动有一个生命周期,决定它们何时创建、恢复、暂停和销毁。当 Activity 被销毁时,其内部状态就会丢失。这包括对 Activity 中任何内部类的引用。
防止内存泄漏
为了避免匿名内部类中的内存泄漏,重要的是:
以上是什么时候在 Android 中使用匿名内部类是安全的?的详细内容。更多信息请关注PHP中文网其他相关文章!