@Override public boolean handleMessage(Message message) { if (message.what == RECYCLE_RESOURCE) { Resource<?> resource = (Resource<?>) message.obj; resource.recycle(); return true; } return false; }
@Override public synchronized void recycle() { stateVerifier.throwIfRecycled(); this.isRecycled = true; if (!isLocked) { toWrap.recycle(); release(); } }
public void recycle(Resource<?> resource) { Util.assertMainThread(); if (isRecycling) { // If a resource has sub-resources, releasing a sub resource can cause it's parent to be // synchronously // evicted which leads to a recycle loop when the parent releases it's children. Posting // breaks this loop. handler.obtainMessage(ResourceRecyclerCallback.RECYCLE_RESOURCE, resource).sendToTarget(); } else { isRecycling = true; resource.recycle(); isRecycling = false; } }