【问题标题】:Android clean Virtual MemoryAndroid 清理虚拟内存
【发布时间】:2014-07-18 05:35:53
【问题描述】:

我的应用程序从 Web 服务加载了大量数据。问题是,在大量网络请求之后,它因内存不足而崩溃。

我使用 volley 库来处理网络请求,使用 Universal ImageLoader 库来加载和缓存图像。

如何防止它崩溃?是否可以清理虚拟内存?

【问题讨论】:

    标签: android universal-image-loader android-volley virtual-memory


    【解决方案1】:

    你不能告诉 JVM(在这种情况下是 Dalvik)“现在”清理内存,因为垃圾收集器会在它认为合适的时候启动(根据 JVM 规范)。你可以做的是:

    1. 将 null 分配给所有引用您不再需要的对象的变量。
    2. 特别注意引用大型 Java 对象的静态变量。
    3. 从您的代码中显式调用 System.gc(),但请记住,该调用并不意味着垃圾收集将立即开始。而是将此视为对 JVM 尽快开始垃圾收集的建议。

    【讨论】:

    • 谢谢,但我的问题仍然存在。我对多个 Fragment 只使用一个 Activity,并且我有十种不同的布局,这有问题吗?我在使用后清理了所有碎片,但内存继续增加。
    • 远程排除故障非常困难。在传统的 Java 世界中,有像 Wily Introscope 这样的工具。在 Android 上 - 我根本不知道。如果有什么发现我会告诉你的。
    • 实际上,只是通过谷歌搜索我发现了这个:slideshare.net/zblair/… 看起来是一个很好的起点。
    • 谢谢,在您的帮助下,我发现了问题所在。问题出在凌空请求上,我有 92 个“com.android.volley.NetworkDispatcher”实例,现在我需要弄清楚为什么会发生这种情况
    • 是的,我知道,解决内存泄漏问题并不好玩,尤其是在处理 3rd 方库时。祝你好运。
    【解决方案2】:

    您可以使用 clear() 删除 volley 缓存或手动设置其大小 Android Volley + JSONObjectRequest Caching

    与通用 ImageLoader 库相同 见https://github.com/nostra13/Android-Universal-Image-Loader - 配置

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2011-06-08
      • 1970-01-01
      • 2018-07-09
      • 2012-06-30
      相关资源
      最近更新 更多