由于 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 的建议很可靠,当我不再需要它们时一定会取消请求
我不熟悉 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 的建议很可靠,当我不再需要它们时一定会取消请求