blob: febe945d07c17f78833314c5ca1e6436e4291de3 [file] [log] [blame]
package com.bumptech.glide.load.engine;
/**
* A resource interface that wraps a particular type so that it can be pooled and reused.
*
* @param <Z> The type of resource wrapped by this class.
*/
public interface Resource<Z> {
/**
* Returns an instance of the wrapped resource.
* <p>
* Note - This does not have to be the same instance of the wrapped resource class and in fact it is often
* appropriate to return a new instance for each call. For example,
* {@link android.graphics.drawable.Drawable Drawable}s should only be used by a single
* {@link android.view.View View} at a time so each call to this method for Resources that wrap
* {@link android.graphics.drawable.Drawable Drawable}s should always return a new
* {@link android.graphics.drawable.Drawable Drawable}.
* </p>
*/
Z get();
/**
* Returns the size in bytes of the wrapped resource to use to determine how much of the memory cache this resource
* uses.
*/
int getSize();
/**
* Cleans up and recycles internal resources.
*
* <p>
* It is only safe to call this method if there are no current resource consumers and if this method has not
* yet been called. Typically this occurs at one of two times:
* <ul>
* <li>During a resource load when the resource is transformed or transcoded before any consumer have
* ever had access to this resource</li>
* <li>After all consumers have released this resource and it has been evicted from the cache</li>
* </ul>
*
* For most users of this class, the only time this method should ever be called is during transformations or
* transcoders, the framework will call this method when all consumers have released this resource and it has
* been evicted from the cache.
* </p>
*/
void recycle();
}