Glide Bildbelastung mit Anwendungskontext

Ich bin mit Gleiten für Bild laden in meiner Android-App, um alle Abstürze zu vermeiden Ich lade Bilder mit Anwendungs-Kontext. Was wird dies bei der Anwendung von Anwendung und Speicherung bewirken?

  • Key-Event nicht auslösen in Firefox auf Android, wenn Wort Vorschlag ist auf
  • Absicht, einen Chat mit einem bestimmten Benutzer auf Snapchat App zu öffnen
  • NotifyDataSetChange funktioniert nicht vom benutzerdefinierten Adapter
  • Warum ist meine App nicht auf der Liste der Apps, um die txt-Datei zu öffnen?
  • AdView - Fehlende AdActivity mit Android: configChanges in AndroidManifest.xml
  • Verfolgen von Web-to-Device-Installationen mit Google Analytics v4
  • Android Adb Shell am Broadcast: Schlechte Komponentenname
  • Prüfen Sie, ob die SPP UUID 00001101-0000-1000-8000-00805F9B34FB auf dem Server vorhanden ist
  • Wie wird EasyEditSpan in Android verwendet, um eine teilweise Textbearbeitung zu ermöglichen?
  • Wie man Objekte mit hoher Geschwindigkeit in Unity kollidiert
  • Android: Farbe der Zeile unter ActionBar ändern
  • So erstellen Sie Google App-Einladungen
  • 2 Solutions collect form web for “Glide Bildbelastung mit Anwendungskontext”

    Was wird dies bei der Anwendung von Anwendung und Speicherung bewirken?

    Gleiten bietet so viele .with() Methoden aus einem Grund: es folgt Lebenszyklus.

    Stellen Sie sich ein Fragment , das dynamisch einer Aktivität hinzugefügt wird. In seiner onCreateView Methode startet eine onCreateView eines 3MB-Bildes. Nun, was ist, wenn der Benutzer die Rücktaste drückt und das Fragment entfernt wird oder die ganze Aktivität geschlossen ist?

    • Wenn du with(getActivity().getApplicationContext()) wird nichts passieren, alle 3MBs von Daten werden heruntergeladen und dann decodiert, zwischengespeichert, vermutlich sogar auf die ImageView gesetzt, die dann Müll gesammelt wird, weil die einzige Referenz darauf war Glide Einbauten.
    • Wenn Sie with((Fragment)this) Gleiten abonniert die Fragment-Lifecycle-Ereignisse und sobald das Fragment gestoppt wird, sollte die ausstehende Anfrage pausiert werden; Und wenn sie zerstört werden, werden alle anhängigen Anfragen gelöscht. Dies bedeutet, dass der Bild-Download in der Mitte zu stoppen und keine Ressourcen mehr von diesem toten Fragment verwendet werden.
    • Wenn du with(getActivity()) Gleiten die Lebenszyklusereignisse der Aktivität und das gleiche geschieht wie oben, aber nur, wenn die Aktivität gestoppt oder zerstört wird.

    Also die beste Praxis ist es, den engsten Kontext / Fragment zu verwenden, um unbenutzte Anforderungsabschlüsse zu vermeiden! (Es gibt auch eine manuelle Möglichkeit, eine Last zu stoppen: Glide.clear(ImageView|Target) .)


    Um dies in der Praxis anwenden zu versuchen, with(this) wenn möglich zu verwenden, aber wenn es nicht ist, wie in einem Adapter oder eine zentrale RequestManager glide , geben Sie einen RequestManager glide als ein Argument RequestManager glide und verwenden Sie glide.load(... , beispielsweise:

     static loadImage(RequestManager glide, String url, ImageView view) { glide.load(url).into(view); } 

    Oder im Adapter:

     class MyAdapter extends WhichEveryOneYouUse { private final RequestManager glide; MyAdapter(RequestManager glide, ...) { this.glide = glide; ... } void getView/onBindViewHolder(... int position) { // ... holder magic, and get current item for position glide.load... or even loadImage(glide, item.url, holder.image); } } 

    Und benutze diese aus Aktivität / Fragment:

     loadImage(Glide.with(this), url, findViewById(R.id.image)); // or list.setAdapter(new MyAdapter(Glide.with(this), data)); 

    Das hat für mich gearbeitet, wenn ich das Bild geladen habe:

     if (!this.isFinishing ()) { Glide.with(this)... } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.