android - 传递任何对象时发生内存泄漏

标签 android memory-leaks

我有一个关于安卓内存泄漏的问题。

 public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MyClass m = new MyClass();
    m.setListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

}

public class MyClass {

private static  View.OnClickListener listener;

public void setListener(View.OnClickListener listener) {
   this.listener = listener;
}
}

它会导致内存泄漏吗?如果是,为什么?通过监听器是一种很好的技术吗?

最佳答案

静态字段 具有潜在危险,因为它们可以被 Actvities 和其他对象引用,从而导致我们的大部分内存泄漏问题。

静态对象的生命周期等于应用程序的生命周期,这意味着它在应用程序运行之前一直存在,并且在应用程序完成之前不能被收集。您制作了内存泄漏的基本示例。

ViewsActivity 相关并强烈引用它,但当您将其声明为 private static View.OnClickListener listener 时,它将泄漏。

关于android - 传递任何对象时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071846/

相关文章:

python - 在 Python 中卸载模块

memory - iOS 6,崩溃并出现内存不足警告

winforms - 检测 Winforms 中的 gdi/用户处理程序泄漏

c++ - 具有数字集 C++ 的多态性中的内存泄漏

java - 在没有FirebaseRecyclerAdapter的情况下如何增加Firebase中每个位置的viewCount?

android - 像素比率 : are the "fake" pixel values on hi-res devices applied to all width properties, 或仅适用于选定的比率?

java - Android Studio/Intellij,Gradle 错误 :Cause: peer not authenticated

java - LibGdx - 切换屏幕时严重内存泄漏

android - 如何在 Kotlin 中发出 API 请求?

android - java.lang.VerifyError : Verifier rejected class: Constructor returning without calling superclass constructor 错误