@@ -235,12 +235,29 @@ export class ImagePipeline {
235235 try {
236236 const context = Utils . android . getApplicationContext ( ) ;
237237 const requestManager = com . bumptech . glide . Glide . with ( context ) ;
238+ const requestBuilder = requestManager . asBitmap ( ) . load ( uri ) ;
239+ function clear ( ) {
240+ if ( futureTarget ) {
241+ com . bumptech . glide . Glide . with ( context ) . clear ( futureTarget ) ;
242+ }
243+ }
244+ // Build request listener that resolves the promise when resource is ready
245+ const listener = new com . bumptech . glide . request . RequestListener ( {
246+ onLoadFailed ( e : any , model : any , target : any , isFirstResource : boolean ) : boolean {
247+ clear ( ) ;
248+ reject ( e ) ;
249+ return true ; // consumed
250+ } ,
251+ onResourceReady ( resource : any , model : any , target : any , dataSource : any , isFirstResource : boolean ) : boolean {
252+ clear ( ) ;
253+
254+ resolve ( ) ;
255+ return true ; // consumed
256+ }
257+ } ) ;
238258
239- // Preload into memory cache
240- requestManager . asBitmap ( ) . load ( uri ) . preload ( ) ;
241-
242- // Give Glide time to load into memory
243- setTimeout ( ( ) => resolve ( ) , 100 ) ;
259+ // Kick the request off and keep a reference to the FutureTarget so it can be cleared.
260+ const futureTarget = requestBuilder . listener ( listener ) . preload ( ) ;
244261 } catch ( error ) {
245262 reject ( error ) ;
246263 }
@@ -252,13 +269,27 @@ export class ImagePipeline {
252269 try {
253270 const context = Utils . android . getApplicationContext ( ) ;
254271 const requestManager = com . bumptech . glide . Glide . with ( context ) ;
255-
256- if ( toDiskCache ) {
257- requestManager . downloadOnly ( ) . load ( uri ) . submit ( ) ;
258- } else {
259- requestManager . asBitmap ( ) . load ( uri ) . submit ( ) ;
272+ const requestBuilder = toDiskCache ? requestManager . downloadOnly ( ) . load ( uri ) : requestManager . asBitmap ( ) . load ( uri ) ;
273+ function clear ( ) {
274+ if ( futureTarget ) {
275+ com . bumptech . glide . Glide . with ( context ) . clear ( futureTarget ) ;
276+ }
260277 }
261- resolve ( ) ;
278+
279+ const listener = new com . bumptech . glide . request . RequestListener ( {
280+ onLoadFailed ( e : any , model : any , target : any , isFirstResource : boolean ) : boolean {
281+ clear ( ) ;
282+ reject ( e ) ;
283+ return true ;
284+ } ,
285+ onResourceReady ( resource : any , model : any , target : any , dataSource : any , isFirstResource : boolean ) : boolean {
286+ clear ( ) ;
287+ resolve ( ) ;
288+ return true ;
289+ }
290+ } ) ;
291+
292+ const futureTarget = requestBuilder . listener ( listener ) . preload ( ) ;
262293 } catch ( error ) {
263294 reject ( error ) ;
264295 }
0 commit comments