【问题标题】:Eclipse MAT shows memory leak due to Volley NetworkDispatcher and CacheDispatcherEclipse MAT 显示由于 Volley NetworkDispatcher 和 CacheDispatcher 导致的内存泄漏
【发布时间】:2016-12-21 19:23:24
【问题描述】:

我是 MAT 新手,不知道如何检测和消除泄漏,但为什么 volley 是我所有泄漏背后的原因?

我该如何解决这个问题?

【问题讨论】:

    标签: android memory-leaks out-of-memory android-volley eclipse-memory-analyzer


    【解决方案1】:

    在运行会重复后台/重新显示应用程序的自动化测试时,我发现了同样的问题。我的解决方案(至少解决了运行测试的问题)是在 tearDown() 中执行此操作:

        // cancel() for each request will get them removed, which can otherwise leak memory
        MyApplication.getRequestQueue().cancelAll(new RequestQueue.RequestFilter() {
            @Override
            public boolean apply(Request<?> request) {
                return true;
            }
        });
    

    根据您的请求队列的管理方式,您可以执行类似的操作。问题是当队列停止时,请求会留在队列中并且永远不会被清理。因此,无论您在哪里开始/停止队列,都需要格外小心以取消任何未完成的请求。

    【讨论】:

    • 是的,完全正确,我应该取消我的请求。然而问题是我应该使用单例模式。我也会采纳你的建议也非常感谢
    • 啊哈,是的,这也会导致此问题可见。
    • 如果您知道如何解决这个问题stackoverflow.com/questions/38964271/…,我可以取消我的请求
    【解决方案2】:

    问题是我的 RequestQueues 没有使用单例模式 https://developer.android.com/training/volley/requestqueue.html#singleton 这个链接解决了我的问题

    @Turnsole 的建议也很中肯,当我不再需要请求时,一定会取消请求

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多