RecyclerView und asynchrone Laden
Ich habe ein kleines problem. Brauche einen Schubs in die richtige Richtung.
Ich bin ein video-editor wie Vine und/oder instagram. Wo Sie zeigen eine Zeitleiste mit screencaps aus dem video
Es fügt nur mehr Bilder, die je auf den videos Dauer. Was habe ich für meine app, die ich Hinzugefügt ein recyclerView. Diese recyclerview hat einen adapter, der ruft die folgende Funktion jedes mal onBindViewHolder
public Bitmap getFrameFromCurrentVideo(int seconds) {
Bitmap bitmap = null;
if(mMediaMetadataRetriever != null) {
bitmap = mMediaMetadataRetriever.getFrameAtTime(seconds * 1000000, MediaMetadataRetriever.OPTION_CLOSEST);
}
return bitmap;
}
Dies funktioniert, und es fügt die richtige Menge der Bilder, die ich will. Aber das problem ist, dass es zu schwer ist auf dem UI-thread. Da die recyclerView ist recycling alles. Dann lags jedes mal, wenn es ein frame ist.
Also dachte ich, dass ich zu tun haben einige async-task und dann den cache der Bilder. Aber was ich gelesen habe ist, dass AsyncTask wird nicht empfohlen für die recycler gesehen, da es recycelt.
Also, was soll ich tun, um enchance die Leistung? Jede gute Idee?
- Ich bin mir nicht sicher. Haben Sie versucht, mit Gleiten, bis die Bilder geladen? Glide automatisch Zwischenspeichern der Bilder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was ich getan habe um mein problem zu lösen.
Ich erstellte async task-und memory-cache mein Ergebnis.
Meinen adapter überprüft, ob das Bild schon vorhanden ist. Wenn es das tut. Dann überspringen wir tun, die Arbeit im hintergrund. Sonst Mach ich die asynchrone Aufgabe und versuchen, das image laden. Wir markieren auch die Ansicht nur, wenn der Benutzer scrollt, während die Aufgabe ist nicht fertig.
Dies hilft uns, überprüfen Sie, ob der Tag anders aus, was die Aufgabe haben. Wenn es das gleiche ist. Dann können wir sicher stellen das Rechte Bild in der Bildansicht.
Snippet von meinem adapter
Meine AsyncTask-Klasse
Snippet von meinem fragment-Klasse
Kann ich nur empfehlen, https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html wenn Sie möchten, zu Lesen, auf caching
Und auch https://developer.android.com/reference/android/os/AsyncTask.html für das Lesen bis auf asyncTask ist