2013-06-09 8 views
9

Unsere Anwendungen sind live im App Store. Ich möchte Abstürze von nicht genügend Speicher erkennen, die einige Benutzer bekommen. Ich verstehe, dass es keinen Weg gibt, 100% einen Speichermangel zu erkennen. Gibt es eine Möglichkeit, diese Abstürze (mit einer ziemlich großen Wahrscheinlichkeit) zu erkennen, indem Sie eine gewisse Logik in applicationDidReceiveMemoryWarning ausführen? (Ich spreche nicht über das Finden in xcode während der Entwicklungszeit, ich spreche über Code, der den Speichermangel von tatsächlichen Benutzern erkennt und etwas in Datei protokolliert)Erkennen Sie nicht genügend Arbeitsspeicher crash (IOS)

+0

Verwendung Instrumente (cmd + I) folgen den Zuordnungen. – Levi

+0

Obwohl es eine technische Sache ist: Ihre App wird wegen zu wenig Arbeitsspeichers beendet, ist nicht wirklich ein 'Absturz' (obwohl es für Ihren Benutzer so aussieht). – occulus

+0

Im Allgemeinen, nein. Die wahrscheinlichste Ursache für eine Situation mit zu wenig Arbeitsspeicher ist jedoch die falsche Verwendung von UIImage, die dazu führt, dass zu viele Bilder gleichzeitig im Speicher gehalten werden. Eine andere sehr wahrscheinliche Ursache sind Ref-Count-Schleifen in ViewControllern, die andere View-Controller in einer Weise anzeigen, die eine Schleife verursachen. Das Problem ist, dass diese Probleme oft erst in Ihrem Produkt auftreten, nachdem es veröffentlicht wurde und auf Endbenutzergeräten ausgeführt wird. Nur ein sehr sorgfältiger Entwicklungsprozess und Code-Reviews können diese Art von Problem verhindern. – MoDJ

Antwort

0

Achten Sie auf die applicationWillTerminate Nachricht in Ihrer App delegieren. Dies wird aufgerufen, wenn Ihre App vom System beendet wird (z. B. wegen zu wenig Speicherplatz), aber nicht, wenn der Benutzer die App auf die übliche Weise durch Drücken der Home-Taste verlässt. Hinweis: wenn Ihre Anwendung im Hintergrund ist und Speicher leer ist, Ihre Anwendung ohne irgendwelche Nachrichten gesendet, um es getötet wird.

YMMV, vor allem mit älteren Versionen von iOS, und es ist die Erforschung wert, um sicherzustellen, dass die oben genau ist.

Die Bilder bei this blog post sind recht informativ (wenn auch etwas veraltet).

Weitere Informationen finden Sie How to know whether app is terminated by user or iOS (after 10min background)

+2

wird applicationWillTerminate jedes Mal ausgeführt, wenn die App wegen Speicher beendet wird (wenn sie im Vordergrund ist)? Wird es auch aufgerufen, wenn der Benutzer die App vollständig schließt (nicht in den Hintergrund)? – AJ222

-3

erstens Ihre Anwendung analysieren, indem Sie oben Menüleiste Ihres Xcode auf dem Produkt klicken und klicken Sie auf Abschnitt analysieren Sie die Anzahl der Leckagen an in der Anwendung zeigen und kann bringen Sie zu dem Ort, wo Lecks aufgetreten sind. So können Sie das Speicherleck finden und beheben. Zweitens hat es oben nicht funktioniert dann sehen Sie auf der View-Controller, wo Absturz aufgetreten ist und prüfen, ob Sie ein Objekt zur Freigabe verlassen haben. Hoffe, dass dies Ihnen helfen könnte, Ihr Problem zu lösen.

+2

Sie haben eine andere Frage beantwortet. Er sagte sogar in seinem Beitrag "Ich spreche nicht darüber, es während der Entwicklungszeit in xcode zu finden". – occulus

-2

Es gibt gute Bibliotheken von Drittanbietern verfügbar Ihre Leistung der iOS-Anwendung in Echt time.Below 2 zu verfolgen, sind gut bekannt solche Kategorie:

  1. Google Analytics
  2. Crittercism

Sie verfolgen und senden Sie die Absturzberichte von den Geräten der Benutzer an Ihr Konto. Sie benachrichtigen Sie hoffentlich auch über Abstürze wegen zu wenig Speicher!

https://developers.google.com/analytics/devguides/collection/ios/

https://www.crittercism.com/

Hoffnung könnte dies Ihr Problem bis zu einem gewissen Grad lösen.

3

Während ich für jeden Dienst oder eine Bibliothek suchen, die mir OOM-Tracking geben, kann ich nur diesen Artikel von Facebook-Engineering finden:

https://code.facebook.com/posts/1146930688654547/reducing-fooms-in-the-facebook-ios-app/

Die Idee, den Grund zu folgern ist, warum die App benötigt starten, verschiedene Aspekte prüfen (zB ob die App im Hintergrund war, ob es ein App/OS-Update gibt, ...).

Wegwerfen alle anderen möglichen Grund, dass die vorherige App Ausfahrt zwingen können, können Sie wissen, ob der Grund, ein Hintergrund aus dem Speicher aus dem Speicher oder ein Vordergrund.

Es wäre nett, eine Bibliothek zu haben, die das Facebook-Artikelverfahren implementiert. Aber heutzutage konnte ich keine finden, wahrscheinlich gibt es einen Grund, der es schwierig macht oder unmöglich ist, es als SDK hinzuzufügen.

Wenn jemand einen Dienst weiß, fügen Sie es mit jeder mit einem Kommentar teilen oder eine neue Antwort.

Edit:

ich diesen Github entdeckt haben (https://github.com/jflinter/JRFMemoryNoodler) mit einer Implementierung der Facebook nach dem Eingriff. Ich habe es noch nicht versucht, aber wir werden es in unseren Apps einsetzen, um es auszuprobieren.

+0

hast du es am Ende versucht? ein Erfolg? – Johanisma

+0

@Johanisma, nein, wir würden unsere Apps mit dieser Bibliothek (JRFMemoryNoodler) bereitstellen, aber kurz vor dem Schließen des Builds haben wir uns entschieden, es zu entfernen. Denn als wir den App-Crash (während der Entwicklung) erzwangen, waren wir nicht sicher, ob dieses Tool uns helfen könnte, die verschiedenen OOMs zu erkennen (vielleicht haben wir die Abstürze nicht richtig interpretiert oder es hat nicht gut funktioniert). Wenn Sie etwas finden, teilen Sie es, weil Sie immer noch OOM haben. –

Verwandte Themen