每次我发出请求时,我都会创建一个新的Volley Request Queue:
public void initializeQueue(Context context){
File cacheDir = new File(context.getCacheDir(), "Volley");
this.queue = new RequestQueue(new DiskBasedCache(cacheDir), new BasicNetwork(new HurlStack()), MAX_SIZE_THREAD_POOL);
this.queue.start();
}
当我完成我的请求时,我会清理变量
this.queue = null;
但是当我提出很多请求时,错误“抛出记忆错误”pthread_create“它被抛出。所以我在互联网上搜索,结论是只启动一次队列。
但是我的问题是,如果我不断创建新的队列,为什么内存会一直上升?我使变量为空,这样旧队列就无法访问,GC可以收集。还有其他东西持有队列吗?
注意对于上面的上下文,使用应用程序。
谢谢你们
我对这个问题的合理猜测是:
上下文:
您正在将应用程序上下文传递给队列。因此它将保留引用,直到应用程序存活。
代码
this.queue = null;
因为这段代码只会清除它持有的引用,而不是它占用的内存。从内存中清除它是GC
的工作,你不能保证GC何时会调用。
为什么要为每个请求创建一个新的Request estQueue。您可以检查null
。创建队列并使用相同的队列进行进一步处理。
File cacheDir = new File(context.getCacheDir(), "Volley");
if( this.queue == null ){
this.queue = new RequestQueue(new DiskBasedCache(cacheDir), new BasicNetwork(new HurlStack()), MAX_SIZE_THREAD_POOL);
}
资源:-理解上下文,理解参考