由于 Volley NetworkDispatcher 和 CacheDispatcher,Eclipse MAT 显示内存泄漏

Eclipse MAT shows memory leak due to Volley NetworkDispatcher and CacheDispatcher

我不熟悉 MAT 以及如何检测和消除泄漏,但为什么我的所有泄漏背后都是齐射?

我该如何解决这个问题?

我在 运行 自动测试会重复 background/resurface 应用程序时发现了同样的问题。我的解决方案(至少解决了 运行 测试的问题)是在 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;
        }
    });

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

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

此外@Tunsole 的建议很可靠,当我不再需要它们时一定会取消请求