2011-01-06 3 views
3

Ich bin mit dem Problem der niedrigen Speicher konfrontiert. Low memory:no more background process Und hier ist das Szenario.Android Niedriger Speicher: kein Hintergrundprozess mehr ?? Brauchen Sie Hilfe

Ich benutze eine Liste, die ihre Daten aus einem String-Array erhält, hat einen benutzerdefinierten Hintergrund, Klicken auf Element, die Liste erhält ein anderes String-Array, um als zweite oder dritte Ebene anzuzeigen. Informationen für drei Ebenen in Datenbank geschrieben.

Nach der dritten Ebene gibt es zwei weitere Ebenen, für die Daten von Web-Services abgerufen werden wird,

Und das bewirkt, dass der niedrige Speicherfehler.

Wie kann ich die Lösung loswerden?

Edit: Nachdem einige graben, die ich, dass der GC gefunden versucht (töten oder) Neustart bei seiner bereits abgestürzt com.android.inputmethod.latin/.latinIME Service. Ein bemerkenswerter Punkt ist, dass die Anwendung in Französisch und Italienisch übersetzt wird, aber dieser Bildschirm hat keinen Text für die Übersetzung, hilft diese Information?

Bearbeiten 2: Nach einer detaillierten Studie von TraceView habe ich festgestellt, dass alle Textansichten benutzerdefinierte Schriftarten angewendet haben. (Es gibt einen Aufruf von TypeFace.createFromAsset()), dass IMO die Abstürze verursacht.

Und das Problem liegt in der Tatsache, dass ich die Schriftarten zu halten .... kann es möglich sein zu vermeiden, Absturz und haben die Schriftarten ?? (Weil ich denke, die Antwort ist nein: Aber warten noch auf einige Meinungen)

bearbeiten 3: Nachdem die benutzerdefinierte Entfernen der Leistung von Anwendung Schriften ist viel besser. Daher kann ich vermuten, dass die Schrift der einzige Schuldige ist. Und deshalb bearbeite ich die Frage. Die Schriftart, die ich benutze, ist Helvetica.

Kann die Verwendung externer Schriftarten zum Absturz der Anwendung oder zu wenig Arbeitsspeicher führen? Wenn ja, können Sie die Ursache genauer beschreiben?

Dank

+1

Wie groß sind diese "String Arrays"? Ich schlage vor, DDMS zu benutzen, um den Zustand Ihres Heaps zu überwachen, während Sie durch die Niveaus gehen ... –

+0

nicht mehr als 100 bis 400 auf der dritten Ebene. Die zweite Ebene hat einen Durchschnittswert von 500, kann das Anwenden von benutzerdefinierten Schriftarten zu einem geringen Speicherfehler führen ??? – Prasham

+1

Nun vorübergehend die benutzerdefinierten Schriftarten herausnehmen und sehen, ob es hilft. Wenn ja, dann weißt du, dass das dein Problem ist. Sie sollten mehr Informationen btw ... * was * eigentlich abstürzt, * was * Schriftarten verwenden Sie, etc usw. usw. –

Antwort

11

rufen Wenn Sie Code verwenden, sind ähnlich wie:

Typeface font = Typeface.createFromAsset(getContext().getAssets(), 
"fonts/Helvetica.ttf"); 

Versuchen Sie, "Schriftart" eine globale Variable zu machen, so dass es nur einmal geladen wird. Ansonsten kann es wiederholt geladen werden, schnell Speicher verbrauchen. See this message für ein wenig mehr Detail

+1

ich stimme dieser Antwort zu, da ich in das gleiche Speicherproblem mit benutzerdefinierten Schriftartdateien gelaufen bin Laden Sie die Schriftart so oft wie möglich und Ihre App wird in Ordnung – binnyb

+0

Danke Cameron, ich habe nicht darüber nachgedacht, eigentlich haben wir die Zeile versehentlich auskommentiert, und das hat zur Folge, dass die Schriftart jedes Mal neu generiert wird, wenn eine Textansicht erstellt wird. Vielen Dank. – Prasham

+0

@ MobileDev123: Es sind immer die kleinen Dinge, die die größten Probleme verursachen :) – Cameron

0

Nun, ist Frage ein wenig unklar geantwortet haben:

  1. Nach jedem Level - do/Sie wechseln auf eine andere Aktion starten? Wenn ja, sollten Sie nirgendwo Referenzen zu alten Aktivitäten aufbewahren. Sonst könnte es OOM Probleme auslösen
  2. Ich nehme an, Sie holen Daten mit einer Art von Cursor gleiches Objekt. Cursor ‚s sind sehr speicherintensive Objekte, so dass Sie besser nicht nur gerade in der Nähe Cursor‘ s, aber Sie sollten auch Cursor.deactivate()
+0

1. Nein, es ist die gleiche Aktivität, ich ändere nur den Listenadapter. 2. Ich benutze den Arrayadapter hier nicht den Cursoradapter. – Prasham

+0

Können Sie mir sagen Welche zusätzlichen Informationen sollte ich zur Verfügung stellen, um die Frage klar zu machen? – Prasham