上一节我们讲了请求发出去的整个过程,在BasicNetwork中,我们发现了一个属性。
private static int DEFAULT_POOL_SIZE;
protected final ByteArrayPool mPool;
DEFAULT_POOL_SIZE = 4096;
这个ByteArrayPool是做什么的,看名字是一个字节数组的池子,就好像线程池、连接池一样,大概也明白了,就是用来复用的,具体的我们来看一看。
假如我们自己写一个Http请求,接收返回数据时,最直接最常见的就是new一个byte[],用来接收response的数据,一个两个请求还好,作为一个支持多并发请求的框架,如果每次都是new的话,这个开销太大,内存占用太多、碎片问题就会出现,所以Volley在这方面还是做了工作的,引入了ByteArrayPool,它内部有一个列表,在new一个byte[]前,先会到列表中查找,是否有可以容纳新byte[]的对象,如果有就取出来使用,如果没有,就new一个,并放入列表中,待用。下