传递任何对象导致内存泄漏

时间:2018-10-30 19:46:37

标签: android memory-leaks

我对Android内存泄漏有疑问。

 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;
}
}

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

1 个答案:

答案 0 :(得分:1)

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

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

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