• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.bumptech.glide.load.data;
2 
3 import com.bumptech.glide.Priority;
4 
5 /**
6  * An interface for lazily retrieving data that can be used to load a resource. A new instance is created per
7  * resource load by {@link com.bumptech.glide.load.model.ModelLoader}. {@link #loadData(Priority)} may or may not be
8  * called for any given load depending on whether or not the corresponding resource is cached. Cancel also may or may
9  * not be called. If {@link #loadData(Priority)} is called, then so {@link #cleanup()} will be called.
10  *
11  * @param <T> The type of data to be loaded (InputStream, byte[], File etc).
12  */
13 public interface DataFetcher<T> {
14 
15     /**
16      * Asynchronously fetch data from which a resource can be decoded. This will always be called on
17      * background thread so it is safe to perform long running tasks here. Any third party libraries called
18      * must be thread safe since this method will be called from a thread in a
19      * {@link java.util.concurrent.ExecutorService} that may have more than one background thread.
20      *
21      * This method will only be called when the corresponding resource is not in the cache.
22      *
23      * <p>
24      *     Note - this method will be run on a background thread so blocking I/O is safe.
25      * </p>
26      *
27      * @param priority The priority with which the request should be completed.
28      * @see #cleanup() where the data retuned will be cleaned up
29      */
loadData(Priority priority)30     T loadData(Priority priority) throws Exception;
31 
32     /**
33      * Cleanup or recycle any resources used by this data fetcher. This method will be called in a finally block
34      * after the data returned by {@link #loadData(Priority)} has been decoded by the
35      * {@link com.bumptech.glide.load.ResourceDecoder}.
36      *
37      * <p>
38      *     Note - this method will be run on a background thread so blocking I/O is safe.
39      * </p>
40      *
41      */
cleanup()42     void cleanup();
43 
44     /**
45      * Returns a string uniquely identifying the data that this fetcher will fetch including the specific size.
46      *
47      * <p>
48      *     A hash of the bytes of the data that will be fetched is the ideal id but since that is in many cases
49      *     impractical, urls, file paths, and uris are normally sufficient.
50      * </p>
51      *
52      * <p>
53      *     Note - this method will be run on the main thread so it should not perform blocking operations and should
54      *     finish quickly.
55      * </p>
56      */
getId()57     String getId();
58 
59     /**
60      * A method that will be called when a load is no longer relevant and has been cancelled. This method does not need
61      * to guarantee that any in process loads do not finish. It also may be called before a load starts or after it
62      * finishes.
63      *
64      * <p>
65      *  The best way to use this method is to cancel any loads that have not yet started, but allow those that are in
66      *  process to finish since its we typically will want to display the same resource in a different view in
67      *  the near future.
68      * </p>
69      *
70      * <p>
71      *     Note - this method will be run on the main thread so it should not perform blocking operations and should
72      *     finish quickly.
73      * </p>
74      */
cancel()75     void cancel();
76 }
77