【问题标题】:android memory leak安卓内存泄漏
【发布时间】:2011-07-04 11:48:00
【问题描述】:

我很确定这是内存泄漏,但不知道如何修复它

eclipse内存分析器截图(Listener是一个activity启动的服务,airplaneWait是一个BroadcastReceiver)

飞机等待是在一个线程中开始的,在 Listener 的 onCreate() 中。

private IntentFilter ftrAirplaneModeChanged = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);

.

registerReceiver(airplaneWait, ftrAirplaneModeChanged);

为任何帮助而欢呼, ng93

【问题讨论】:

    标签: android memory memory-management memory-leaks


    【解决方案1】:

    我不认为这是内存泄漏。我认为这只是对象的内存分析器表示的工件.. planeWait 引用了 this$0 ,而 this$0 又引用了同一个 planeWait 对象,所以你真的在这里一遍又一遍地看到相同的对象而不是大量不同的对象。 gui 无法区分 "contains a ...""has reference to a ..."

    其中一个可能是另一个的内部类。非静态内部类具有对其父级的隐式引用。

    【讨论】:

    • 但是,当然,您应该检查该列表中每一行末尾的标识符(例如 0x4623a740),看看它们是否真的是相同的两个对象.
    • this$0 始终为 @0x4623ada0,aircraftWait 始终为 @0x4623a740。这个可以吗? (我不知道这些数字是什么意思)
    • 忘了提到还有另外 2 个广播接收器,每个 this$0 都有不同的代码
    • 那些@-code 是对象标识符,所以如果你在同一个VM 的其他地方看到相同的代码,它就是同一个对象。拥有两个对象不是问题。如果您正在寻找内存泄漏,那么您正在寻找许多不同、某个类的不同对象(具有不同的标识符),这远远超出了“自然原因”所应存在的范围。但是,内存分析程序的输出可能很难解释。
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多