Verwalten mehrerer asynctask zum Herunterladen mehrerer Bilder aus HTML-Code, undichte RAM, irgendwelche Ideen?

8

Ich entwickle eine Android-App. Jetzt analysiere ich BBCode zu HTML und zeige es in einer Textansicht an, die Textansicht ist in einer benutzerdefinierten Listenansicht. Ich verwende Html.ImageGetter (), um die Bilder anzuzeigen, die von AsyncTask heruntergeladen wurden.

Es funktioniert gut für eine geringe Anzahl von Bildern. Aber wenn die App aufgefordert wird, 40-50 Bilder herunterzuladen, werden 40-50 Aufgaben erstellt und es wird ein Durcheinander. Jede Aufgabe öffnet einen Stream zum Herunterladen der Bilder. Danach dekodiert er die Bytes in Bitmaps, skaliert sie, speichert sie auf der SD-Karte und recycelt die Bitmaps.

Nun, wenn die App alle diese Bilder gleichzeitig lädt, wird eine riesige Menge RAM verbraucht. Ich schaffte es 48 MB zu passieren. Es gibt eine große Lücke zwischen 16 und 48 :(. Ich suchte, wie man das löst. Ich lud AsyncTask Code von Google herunter:

Ссылка

Und setze die Poolgröße auf 3. Aber das hat nicht geholfen. Ich kann wirklich nicht herausfinden, wo ich Ram verliere. Sobald ich eine große Aufgaben-Warteschlange aufstelle, wird mein Widder verrückt. Nachdem ein paar Bilder empfangen wurden, wird es am schlimmsten. Ich denke nicht, dass es die Bilder sind, da ich bis 30 mb kommen kann, bevor irgendein Bild angezeigt wird. Die App selbst einschließlich der Ansicht, Informationen und deren Service verwendet 13 MB, der ganze Rest ist hier durchgesickert.

Macht die Warteschlange selbst große RAM-Zuweisungen? Oder gibt Html.ImageGetter () irgendwie eine Menge Speicher frei? Gibt es einen besseren Weg, dies zu tun?

Hier lade ich die Bilder:

%Vor%

Und hier rufe ich Html.ImageGetter () auf, das ist in einer Liste getView:

%Vor%

Danke!

Schließlich war das Problem, dass alle Aufgaben zur gleichen Zeit geladen wurden. Dafür wurden 40 Bilder beim Herunterladen im RAM zugeordnet. Ich habe es geschafft, die Anzahl der laufenden Aufgaben zu begrenzen, indem ich diese Änderungen an AsyncTask vornahm:

%Vor%     
Mateo 07.02.2011, 11:55
quelle

1 Antwort

9

Mateo dort geht Ihre Antwort Ссылка

Und du bist fertig!

    
100rabh 07.02.2011, 12:11
quelle