【问题标题】:Memory management with background service使用后台服务进行内存管理
【发布时间】:2012-09-02 13:52:42
【问题描述】:

我创建了一个创建后台服务的应用程序。当我关闭应用程序时,服务正在运行,当我返回以将其“绑定”(bindService)以进行通信时。

问题是当我关闭应用程序并重新进入时,它会显着增加正在使用的内存。花 20Mb -> 24Mb,如果我出去又来 24Mb -> 28Mb,28Mb -> 30Mb ... 从而破坏了应用程序。我没有位图。如果足够使用静态数组,但我已经测试过并且不是问题的根源。

当我完全关闭应用程序(包括服务)时,调用 System.exit(0) 并清理所有内存,但当然,我可以在服务关闭时继续运行时调用。我尝试调用垃圾收集器 (System.gc()),如果我注意到内存减少到关闭,但是当您再次打开应用程序时,相同的内存会增加。

非常感谢您的帮助,再见!

【问题讨论】:

    标签: android memory memory-management memory-leaks


    【解决方案1】:

    考虑到我们掌握的信息,我怀疑问题是 Activity 泄漏。 你能检查两件事吗:

    1. 仔细检查是否使用可存储的Activity Context(引用Activity)?尤其是在服务中。
    2. 尝试做一个实验 - 在开发者设置中选择“不保留活动” - 每次活动启动后内存会减少吗?

    【讨论】:

    • 我选择了“破坏活动”,没有成功。当服务处于活动状态时,内存会增加以重新进入应用程序。我没有在 Service 中存储对 Activity 的任何引用。我不知道这种增加是从哪里来的。
    • 好的,在这种情况下我只能建议开始内存分析。幸运的是,Android 有很多工具,我建议从这个链接开始:android-developers.blogspot.com/2011/03/… 如果不难 - 你能分享调查结果吗?祝你好运。
    • 信息量不大,对吧?可以请查看文章中的“创建堆转储”段落并尝试使用 MAT 来检查堆吗?它应该提供更多的分配细节。
    • 这是支配树:i.imgur.com/SLAgS.png,这是直方图:i.imgur.com/vYVOV.png
    • 我已经逐点分析了应用程序和内存负载缓慢。难道是Android在有服务运行的Activity结束时不清内存?
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多