1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

OutOfMemoryException ... immer noch

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von samarek, 25.11.2011.

  1. samarek, 25.11.2011 #1
    samarek

    samarek Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    101
    Erhaltene Danke:
    2
    Registriert seit:
    24.10.2011
    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.
     
  2. MichaelS, 25.11.2011 #2
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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...
     
  3. Tom299, 25.11.2011 #3
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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?
     
  4. MichaelS, 25.11.2011 #4
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    Bei so einer menge würde ich eher empfehlen die gesamte DB zu downloaden. Würde erheblich die Performance steigern :D
     
  5. samarek, 25.11.2011 #5
    samarek

    samarek Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    101
    Erhaltene Danke:
    2
    Registriert seit:
    24.10.2011
    :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: 25.11.2011
  6. MichaelS, 25.11.2011 #6
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
  7. samarek, 25.11.2011 #7
    samarek

    samarek Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    101
    Erhaltene Danke:
    2
    Registriert seit:
    24.10.2011
    der JsonReader ist ja schön und gut, ich entwickel allerdings auf API Level 8 und den gibt es erst ab Level 11
     
  8. Tom299, 25.11.2011 #8
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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 ;-)
     
  9. MichaelS, 25.11.2011 #9
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
  10. samarek, 25.11.2011 #10
    samarek

    samarek Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    101
    Erhaltene Danke:
    2
    Registriert seit:
    24.10.2011
    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:
     

Diese Seite empfehlen