Android:活动的静态链接是否总会导致内存泄漏?

时间:2012-05-14 14:50:23

标签: android memory static memory-leaks

public class TestActivity extends Activity {

    public static TestActivity mTestActivity;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mTestActivity = this;
    }

    @Override
    protected void onDestroy() {
        mTestActivity = null;
        super.onDestroy();
    }

}

我可以问一个非常新秀的问题吗? 与活动ALWAYS的静态链接是否会导致内存泄漏?即使我在破坏它'它'它?

修改 如果存在内存泄漏,即使你在销毁时“无效”,你能解释一下原因吗? 我有几年的Java经验,但我无法理解为什么破坏的'null'不会释放内存。

2 个答案:

答案 0 :(得分:1)

如果你在破坏时将其置零,那么就没有必要保持静态。至于泄漏,是的,我认为你会(如果你改变活动)。保持对应用程序的(非静态)引用会更容易。

答案 1 :(得分:0)

onDestroy运行一次 - 如果有的话。直到那时你有泄漏。在onPause()中取消注册。请注意,前Honeycomb onPause()可能是最后一个运行的方法 - 并不是因为一个被杀死的进程带有它的类(以及它们的泄漏),它会对你的情况产生影响。或者我认为。我不知道是否可以在没有调用onDestroy的情况下杀死一个活动(不是在整个过程失败的情况下 - 那么它完全可能但是它也没有像我说的那样有所不同) - 我不这么认为

简而言之,只要您的活动处于活动状态(实例化),您的泄漏就会存在