我正在开发一个项目,并且我一直在看每个onDestroy()上使视图和侦听器无效的方法。我甚至看到了导航rootView并将每个侦听器设置为null的代码。
最初的编码员告诉我,他这样做是为了防止泄漏,但我认为这会对VM造成更大的伤害。你觉得怎么样?
答案 0 :(得分:2)
在我看来,这是不必要的。一旦活动被销毁(即调用 onDestroy ),那么所有视图及其相关的侦听器都有资格进行垃圾收集。
但是,请确保您没有使用活动和/或绑定到活动上下文的任何内容(包括视图)处理任何package com.androidexample.screenonoff;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
public class ScreenOnOff extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_on_off);
// Start AEScreenOnOffService Service
Intent i0 = new Intent();
i0.setAction("com.androidexample.screenonoff.AEScreenOnOffService");
startService(i0);
//startService(new Intent(this, AEScreenOnOffService.class));
}
}
。
答案 1 :(得分:1)
大多数与Android相关的内存泄漏与事件总线的错误使用(忘记取消订阅某些内容)或隐式引用上下文(public class Blah extends AsyncTask<?,?,?>
)或对活动的静态引用有关(因为谁知道为什么,每个人都知道这是一个可怕的想法。)
取消你的观点无助于你找到任何一个。
但是,您可以使用LeakCanary库自动跟踪内存泄漏。
答案 2 :(得分:0)
这可能会导致GC更快地重复使用已使用的内存,但这不是我会做的事情,因为它繁琐且浪费时间。
如果你想防止内存泄漏,你应该使用LeakCanary或MAT等工具,或者\并充分了解不同的Android组件生命周期,并知道在使用静态变量时你在做什么。这个人不太可能避免内存泄漏,除非他在静态字段中引用Android组件(无论如何这都是个坏主意)。