下面是使用Java Pool(泛型池)为Android实例化touchEvents的示例:
import java.util.ArrayList;import java.util.List;public class Pool<T> { public interface PoolObjectFactory<T> { public T createObject(); } private final List<T> freeObjects; private final PoolObjectFactory<T> factory; private final int maxSize; public Pool(PoolObjectFactory<T> factory, int maxSize) { this.factory = factory; this.maxSize = maxSize; this.freeObjects = new ArrayList<T>(maxSize); } public T newObject() { T object = null; if (freeObjects.isEmpty()) { object = factory.createObject(); } else { object = freeObjects.remove(freeObjects.size() - 1); } return object; } public voID free(T object) { if (freeObjects.size() < maxSize) { freeObjects.add(object); } }}
但是,我真的不明白这段代码是如何工作的:
if (freeObjects.isEmpty()) { object = factory.createObject();} else { object = freeObjects.remove(freeObjects.size() - 1);}
让我们说:
touchEventPool = new Pool<touchEvent>(factory, 100);
这是否意味着它将存储一个包含100个事件的数组(当#101进入内部时,将像先进先出一样处理#1)?
我认为它应该保留一些最大数量的对象,然后处理额外的.我读了10次书的描述……但是无法得到它.也许有人解释这是如何工作的?
解决方法:
I assume it supposed to hold some maximum number of objects and then dispose the extra. I read book’s description like 10 times.. and Couldn’t get it. Maybe someone explain how this works?
有点.该类在名为pool的List中保留预先创建的对象的缓存.当您要求新对象(通过newObject方法)时,它将首先检查池以查看对象是否可用.如果池为空,则只创建一个对象并将其返回给您.如果有可用的对象,它将删除池中的最后一个元素并将其返回给您.
注释:
if (freeObjects.isEmpty()) { // The pool is empty, create a new object. object = factory.createObject();} else { // The pool is non-empty, retrIEve an object from the pool and return it. object = freeObjects.remove(freeObjects.size() - 1);}
当您将对象返回到缓存(通过free()方法)时,如果尚未满足池的最大大小,则只会将其放回池中.
注释:
public voID free(T object) { // If the pool is not already at its maximum size. if (freeObjects.size() < maxSize) { // Then put the object into the pool. freeObjects.add(object); } // Otherwise, just ignore this call and let the object go out of scope.}
如果已达到池的最大大小,则不会存储您正在释放的对象,并且(可能)会进行垃圾回收.
总结以上是内存溢出为你收集整理的java – 通过PoolObjectFactory接口使用Pool类实例化全部内容,希望文章能够帮你解决java – 通过PoolObjectFactory接口使用Pool类实例化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)