【问题标题】:good memory class clean up practice?良好的记忆课清理练习?
【发布时间】:2015-09-22 10:11:37
【问题描述】:

我最近一直在观看来自 google android devs 的视频,内容是关于在完成对象后删除对它们的引用的重要性……我只实现了一个简单的清理方法。这真的有效吗?

例如,我在应用中的视图上做了很多动画。为了使事情更清洁,我为不同班级的活动制作动画。我将活动的引用传递给补间动画类。

public void onStart() {
    tweens = new TweenUm(this);
}

在我的 onStop 我做...

public void onStop() {
    tweens.cleanup();
    tweens = null;
    super.onStop();
}

我的清理方法看起来像...

public void cleanup() {
    mainAct = null;
    fab = null;
    fabcrad=null;
    searchFor = null;
}

mainact 是我传入的活动,以及我要删除的其他视图。

这有什么好处吗?

【问题讨论】:

    标签: java android memory memory-leaks


    【解决方案1】:

    不需要添加方法cleanup

    因为您将对对象 tweens 的引用清空,如果内存中没有其他引用,tweens 和仅由补间 (mainAct、fab、fabcrad、searchFor) 引用的所有内部对象将从内存中释放通过垃圾收集器。

    仅使用cleanup 方法关闭资源(如文件、套接字等)。

    注意:虽然清空补间很重要,但创建(和调用)清理不是一个好的选择,实际上有两种可能性:

    • 不存在对补间的其他引用,因此不需要清空内部引用
    • 存在对补间的其他引用,在这种情况下,您可能会破坏补间的内部状态,使其变为无效状态。

    因此,通常如果您不需要关闭外部打开的资源,使用清理方法不是一个好习惯。

    【讨论】:

    • 非常感谢,但在这种情况下,将 tweens = null;删除 ref 并使其可用于 GC ?
    • 是的,将 null 放入补间是正确的。但是方法清理不是一个 ggod 解决方案,实际上有两种可能性:1)不存在对补间的其他引用,因此不需要将内部引用归零 2)存在对补间的其他引用,在这种情况下,您可能会破坏内部状态补间进入无效状态。所以一般来说这不是一个好习惯。
    猜你喜欢
    • 2013-02-08
    • 2020-09-28
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2010-09-23
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多