Es gibt ein paar Dinge, die Sie ausprobieren können, wenn Ihr Programm beim Scrollen oder Blättern ruckelt oder langsam ist. Daher verwenden Sie Dinge wie GPU-Overdraw und Profile-GPU-Rendering, um herauszufinden, wo die Probleme liegen. Aber manchmal kann man das Problem der Verzögerung einfach nicht herausfinden, weil das im Grunde auf ein Bild zurückzuführen ist, das zu genau ein Bitmap ist . Wenn Ihre Android-App viele Bilder oder Bitmaps verwendet, wird Ihre App sicherlich einen enormen Leistungsabfall erfahren und unter einer unerwünschten Verzögerung leiden, die den Benutzer aufregen und ihn/sie dazu bringen könnte, sie zu deinstallieren, was Sie niemals wollen würden. Infolgedessen ruft das Image immer dann, wenn es backstacks auf, im Grunde den Garbage Collector auf , und das häufige Aufrufen führt zum Einfrieren der Benutzeroberfläche.

Die Lösung?

Die Lösung für dieses Problem ist ziemlich einfach und Sie könnten es sogar unwissentlich mit einigen modernen Bibliotheken wie Glide oder Picasso verwenden ! Glide Bitmap Pool ist eine Speicherverwaltungsbibliothek, mit der Sie Bitmap-Speicher wiederverwenden können. Da der Bitmap-Speicher wiederverwendet wird, muss der Garbage Collector nicht wiederholt aufgerufen werden, was zu einem reibungsloseren Funktionieren des Programms führt. Auf unterstützten Android-Versionen wird die Bitmap mit inBitmap dekodiert . Indem Sie den Bitmap-Pool nutzen, um die konstante Speicherzuweisung und -freigabe in Ihrer Anwendung zu minimieren, reduzieren Sie den GC-Overhead, was zu einer stabileren Anwendung führt.

Sehen Sie sich dieses Video von 100 Days of Google devs an, um zu verstehen, wie Sie die Bitmaps wiederverwenden und verhindern, dass Ihre Anwendung abstürzt/hängt.

Erläuterung

Angenommen, wir müssen 10 Bitmaps in unsere Android-App importieren. Wenn wir Bitmap eins laden, wird der Speicher für Bitmap eins zugewiesen. Dann, nach einer Weile, wenn wir keine Bitmap mehr benötigen, sollten wir die Bitmap nicht recyceln (da das Recycling den Aufruf von GC beinhaltet). Verwenden Sie stattdessen diese Bitmap eins als inBitmap für Bitmap zwei. Derselbe Speicher kann somit für Bitmap zwei verwendet werden.

Wiederverwendung der gleichen Bitmap

Lassen Sie uns die obige Erklärung in einem realen Android-Projekt anwenden, um das Wiederverwendungskonzept besser zu verstehen:

Java

Bitmap gfgBitmap = BitmapFactory.decodeFile(gfgPath);
imageView.setImageBitmap(gfgPath);
  
// Here the gfgPath is the path of 
// the bitmap where it is located.
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePathTwo, options);
  
if (canUseForInBitmap(bitmapOne, options)) {
    options.inMutable = true;
    options.inBitmap = bitmapOne;
    // Setting these options are 
    // the most important part!!!!!
}
  
options.inJustDecodeBounds = false;
Bitmap gfgBitmap2 = BitmapFactory.decodeFile(gfgPath2, options);
imageView.setImageBitmap(gfgPath2);

Damit können Sie die Bitmaps jetzt wiederverwenden, ohne den GC wiederholt aufzurufen, und daher hat Ihre Android-App eine verbesserte Leistung und wird jetzt nicht mehr durch die Wiederverwendung der Bitmaps verzögert.

Möchten Sie eine schnellere und wettbewerbsfähigere Umgebung, um die Grundlagen von Android zu erlernen?
Klicken Sie hier , um zu einem Leitfaden zu gelangen, der von unseren Experten speziell kuratiert wurde, um Ihre Branche in kürzester Zeit bereit zu machen!