2017-04-13 3 views
-1

Ich habe eine Observable, die ein Bild asynchron mit verschiedenen filePath lädt und ich möchte die Bitmap-Variable zwischenspeichern. Ich habe versucht, nur eine .cache Methode hinzuzufügen, aber es hat nicht geholfen. Wie führe ich Caching in meinem Fall durch?Caching beobachtbar mit RXJava. Android

Observable.fromCallable(() -> { 
    File outputFile = new File(filePath); 
    Bitmap bitmap = decodeSampledBitmapFromUrl(newTAG, width, height); 
    return bitmap; 
}) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(bitmap -> { 
        mImageView.setImageBitmap(bitmap); 
       }, 
       throwable -> { 
        //handle it 
       }); 
+0

müssen Sie die Bitmap irgendwo speichern. Oder verwenden Sie wahrscheinlich eine gute Bild-Caching-Lib wie Glide oder Picasso. Cache ist nützlich, wenn Sie während der Bildschirmdrehungsänderungen (Abonnieren und Abmelden) eine Netzwerkoperation fortsetzen möchten, um Netzwerkanrufe erneut zu verhindern. https://github.com/anupcowkur/MVPSample/blob/master/app/src/main/java/com/anupcowkur/mvpsample/model/PostsAPI.java – Raghunandan

+0

Ich dachte, RXJava hat einfache Caching-Ansatz "von Box" – Rainmaker

+0

Es hat , aber Sie müssen die beobachtbare Referenz nach dem Aufruf von 'cache' speichern. – Than

Antwort

2

Verwenden Sie Glide oder Picasso und seine integrierte Caching-Funktion, erwägen Sie auch die Verwendung von WeakReferences zum Speichern von Bitmaps.

0

Ihre Mittel besteht darin, die Bitmap-Variable nach dem Code zu verwenden, den Sie zeigen? Wenn Sie es nicht verwenden, sollten Sie die Bitmap.recycler() anrufen.

Verwandte Themen