我对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;
}
}
它会导致内存泄漏吗?如果是,为什么?通过听众是一种好技术吗?
答案 0 :(得分:1)
静态字段具有潜在的危险,因为Actvities
和其他对象可能会引用它们,从而导致大多数内存泄漏问题。
静态对象的生存期等于应用程序生存期,这意味着它在应用程序运行之前一直有效,并且在应用程序完成之前无法收集。您制作了内存泄漏的基本示例。
Views
与Activity
相关,并强烈引用它,但正如您将其声明为private static View.OnClickListener listener
一样,它将泄漏。