是否使每个观点和听众都无法找到或纠正泄漏?

时间:2016-05-09 10:55:39

标签: android memory-leaks

我正在开发一个项目,并且我一直在看每个onDestroy()上使视图和侦听器无效的方法。我甚至看到了导航rootView并将每个侦听器设置为null的代码。

最初的编码员告诉我,他这样做是为了防止泄漏,但我认为这会对VM造成更大的伤害。你觉得怎么样?

3 个答案:

答案 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组件(无论如何这都是个坏主意)。