OutOfMemoryException ... immer noch

S

samarek

Fortgeschrittenes Mitglied
2
Hi,

ich hab das vor kurzem schonmal gepostet und auch ein paar gute Vorschläge erhalten die mir bei der App geholfen haben und mein Verständnis für Android verbessert haben, herzliches Danke nochmal an Alle.

Nichtsdestotrotz bekomme ich immer noch beim ersten Starten der App eine OutOfMemoryException, allerdings NUR beim ersten Starten, wenn ich die App danach erneut starte läuft alles. Ergo müllt er mir beim initialisieren der App den Speicher voll und kann daher die eigentliche App nicht richtig starten.
Zur Struktur:
Beim Starten der App werden von einem Server 3 Versionsdateien als JSON gezogen und mit den in der Datenbank auf dem Handy abgelegten Versionen verglichen, wenn die Versionen auf dem Handy älter sind (oder nicht vorhanden) werden die zu den Versionsdateien korrespondierenden Listendateien als JSON gezogen und in die Datenbank auf dem Handy eingetragen.
Zwei von den Listendateien sind gzip-komprimiert, da sie eher groß sind 440kb und 5,9mb, die werden dann als GZIPInputStream geladen, in (ein immer wieder verwendetes) JSON-Objekt zerlegt und in die Datenbank geschrieben.
Bin jetzt auch schon x-mal durch den Quellcode gegangen Datenbank.java, Json.java usw und hab überall alle unnötigen Objekte entfernt und alle nötigen Objekte nach der Verwendung auf null gesetzt.

Wäre echt tierisch dankbar für Ideen oder Anregungen, weil dass jetzt so in etwa das letzte Problem ist dass ich mit der App noch habe, wenn das ausgemerzt ist müsste sie laufen.
 
bei 6MB Json Datei ist es kein Wunder, dass du die Exception bekommst. Sowas darfst du nicht mit dem JSONObject laden... du müsstest auf nen SAX Parser umstellen sonst bekommst du das nicht performant hin...
 
Wäre es nicht möglich, die 3 Dateien zuerst mal vom Server zu laden (z.b. input stream) und lokal zu speichern und dann mit nem buffered reader oder so die daten lesen und mit der db abgleichen?
 
Bei so einer menge würde ich eher empfehlen die gesamte DB zu downloaden. Würde erheblich die Performance steigern :D
 
:confused2: ich dachte SAX ist nur zum XML parsen

... sind ja alles schöne Vorschläge und ach, könnte es einfach sein wenn ich es so machen könnte, aber ich muss mich da leider innerhalb der Vorgaben bewegen und von daher ist es nicht drin eine komplette Datenbank zu laden.

inwiefern würde es mir denn einen Vorteil bringen die Dateien komplett runterzuladen und dann lokal abzugleichen?
Ich gehe ja davon aus dass die Menge der Daten die Probleme bringt und nicht wo ich die Daten habe.
 
Zuletzt bearbeitet:
der JsonReader ist ja schön und gut, ich entwickel allerdings auf API Level 8 und den gibt es erst ab Level 11
 
wenn du die datei lokal speicherst hast du schon mal den vorteil, daß du nur prüfen mußt, ob die datei runtergeladen wurde und kannst dann deinen import starten.

macht du das online, was passiert bei dir, wenn plötzlich die verbindung abreißt? allein das wäre für mich grund genug, erst mal die datei lokal zu speichern ;-)
 
Soooo
jetzt hat es geklappt, mit der JsonReader-Klasse aus der GSON Library und hab da dann auch direkt noch gemerkt dass ich meine Klassen noch ein wenig umbauen musste um einige Sonderfälle abzudecken, die sind bei meiner vorherigen Rangehensweise "durch's Raster gefallen".

Vielen herzlichen dank für Hilfe, Ratschläge und Geduld, ich hab viel gelernt und meine Liebe zu Java und auch zu Android hat sich deutlich vertieft :love:
 

Ähnliche Themen

A
Antworten
5
Aufrufe
974
jogimuc
J
R
Antworten
1
Aufrufe
993
swa00
swa00
Zurück
Oben Unten