0

Ich versuche, eine Galerie für meine App zu erstellen. Nach einigen Tutorials und Stackoverflow habe ich es endlich geschafft, die Galerie zu machen. Ich verwende Glide, um Bilder zu setzen, also kein Problem mit dem Absturz von Speicher und allem. Das einzige Problem ist, dass Bilder nicht so schnell in ihre Ansichten versetzt werden, wie diese Ansichten angezeigt werden. Hier ist ein gif. So sehe ich die Platzhalter oder den Hintergrund der Recycleransicht, während die Bildansichten eingestellt werden. Abhängig von der Schleudergeschwindigkeit kann dies 500-1000ms dauern. Aber das reicht aus, um die Galerie schlecht aussehen zu lassen. Dies passiert, wenn ich Schleudern benutze, um nach oben oder unten zu scrollen. Dies liegt meines Wissens daran, dass Glide die Bilder aus dem Cache befreit. Gibt es eine Lösung dafür? Hier ist mein Code.Glide Cache-Verwaltung in Recyclerview mit Grid-Layout

activity_gallery:

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
 
    xmlns:tools="http://schemas.android.com/tools" 
 
    android:id="@+id/activity_monuments" 
 
    android:orientation="vertical" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    tools:context=".GalleryActivity"> 
 

 

 

 
    <android.support.v7.widget.RecyclerView 
 
     android:id="@+id/recyclerview_gallery" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" 
 
     android:layout_gravity="center" 
 
     android:alwaysDrawnWithCache="true" 
 
     android:clipToPadding="false" 
 
     android:scrollbars="vertical" 
 
     android:scrollbarStyle="insideOverlay"/> 
 

 
</LinearLayout>

Hier ist, wie ich bin die Einrichtung recyclerview:

RecyclerView gridView = (RecyclerView)findViewById(R.id.recyclerview_gallery); 
 
     gridView.setHasFixedSize(true); 
 
     RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),NUM_OF_COLUMNS); 
 
     gridView.setLayoutManager(layoutManager); 
 
     gridView.isDrawingCacheEnabled(); 
 
     gridView.addItemDecoration(new MarginDecoration(GalleryActivity.this, NUM_OF_COLUMNS, GRID_PADDING, true)); 
 
     gridView.setHasFixedSize(true); 
 
     gridView.setVerticalScrollBarEnabled(true); 
 
     gridView.setBackgroundColor(getResources().getColor(R.color.colorBlack)); 
 
     GalleryAdapter galleryAdapter = new GalleryAdapter(GalleryActivity.this, GalleryActivity.this, ImageNamesList, columnWidth); 
 

 
     gridView.setAdapter(galleryAdapter);

Hier ist, wie ich bin se tting Imageview in Adapter:

viewHolder.galleryImage.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth)); 
 
     Glide.with(context) 
 
       .load(uri) 
 
       .asBitmap() 
 
       .placeholder(R.drawable.monument) 
 
       .centerCrop() 
 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
 
       .into(viewHolder.galleryImage);

Bitte lassen Sie mich der möglichen Lösungen kennen.

S.: Das gif ist niedrige Bildrate und zeigt daher die langsame Schleuder, die nicht der Fall ist.

Antwort

0

Um Cache-Management zu lösen, verwende ich eine Best Practice im Singleton-Store. Realm für Android ist perfekt, es ist NoSQL und super schnell, was ich normalerweise tun, ist ein Realm-Objekt zu erstellen, in der Adapter überprüfen, ob die aktuelle URL im Realm ist, wenn wahr, ziehen Sie kein neues Bild, sonst ziehen und speichern.

Wenn dann die Hauptaktivität oder das Fragment zerstört wird, lösche einfach alle aus dem Realm.