我是 MAT 的新手,不知道如何检测和消除泄漏,但为什么 volley 在我所有的泄漏背后?
我该如何解决这个问题?
在运行会重复背景/重新显示应用程序的自动化测试时,我发现了同样的问题。我的解决方案(至少解决了运行测试的问题)是在 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;
}
});
根据您的请求队列的管理方式,您可以执行类似的操作。问题是当队列停止时,请求会留在队列中并且永远不会被清理。因此,无论您在哪里开始/停止队列,都需要格外小心以取消任何未完成的请求。
问题是我没有为我的 RequestQueues 使用单例模式 https://developer.android.com/training/volley/requestqueue.html#singleton 这个链接解决了我的问题
@Turnsole 的建议也很可靠,当我不再需要它们时,一定会取消请求