2013-11-28 11 views
16

Ich arbeite an mehreren Phonegap-Projekten. In einigen benutze ich die Kamerafunktionen.Phonegap Kamera Android tötet Cordova

ich mit diesem Problem bin rätselhaft (von der Phonegap Dokumentation):

Android Quirks

Android Intents verwendet die Kamera Aktivität auf dem Gerät die Aufnahmen zu starten, und auf Handys mit wenig Speicher, kann die Cordova-Aktivität getötet werden. In diesem Szenario wird das Bild möglicherweise nicht angezeigt, wenn die Cordova-Aktivität wiederhergestellt wird.

Ich habe dieses Problem auf einem meiner Testgeräte ständig (HTC One X). Es ist ziemlich voll, so gut, um das zu testen.

Ich bemerkte, dass es ein alternatives Plugin gibt: https://code.google.com/p/foreground-camera-plugin/ für dieses Problem. Aber ich versuche, Plugins so viel wie möglich zu vermeiden ... (einfach auf andere Plattformen portierbar zu sein). Und es ist bis Phonegap 2.4.0 verfügbar und ich arbeite mit Phonegap 2.9.0

Ich verwende bereits die Datei URI und nicht die Daten (um das Speicherproblem zu vermeiden).

Meine Frage ist: weiß jemand, wenn Android beschließt, andere Aktivitäten (wie Cordova, die für Phonegap dringend benötigt wird) zu töten. Auf welcher Ebene des freien Speichers? (Prozentsatz, MB). So könnte ich das im Voraus überprüfen und den Benutzer warnen.

Natürlich hoffe ich, dieses Problem behoben wird ... aber es scheint nicht bald gelöst werden ....

Bearbeiten nach der ersten Bemerkung

Ich habe nicht die Absicht, die Lösung Das eigentliche Problem, ich habe herausgefunden, dass das nicht wirklich möglich ist. Es ist eine Sache zwischen Android und Phonegap. Ich muss nur wissen, ob es möglich ist, den Benutzer zu warnen, dass dies passieren wird. So kann der Benutzer einige der anderen Anwendungen beenden, bevor er fortfährt ... Also, wann tritt das auf? Wann denkt Android, dass es nicht genug Speicher gibt, um dieses Ding in Gang zu setzen? Das ist meine Frage.

bearbeiten 2013 29. November

Aufgrund der Verbindung von AustinAllover gegeben, jetzt weiß ich, das ist nicht nur ein Phonegap Problem ... Die Android-Kamera scheint alle Java-Anwendungen bei zu wenig zu töten Gedächtnis ... so ist die Frage allgemeiner als Phonegap/Cordova nur ...

+0

@AustinAllover: Ich glaube nicht, dass ich Ihre Frage verstehe, oder Sie mein Problem. Die Cordova (Phonegap) App wird von Android (wegen Speicherproblem) getötet, in diesem Fall gibt es keinen Rückruf. Nachdem das Bild aufgenommen wurde, wird die Phonegap App von Grund auf neu gestartet ... keine Kenntnis von etwas passiert ist, bevor ... –

+1

diese Frage hat einige interessante Antworten ... http://StackOverflow.com/Questions/8368091/Phonegap -camera-neustart-the-application – AustinAllover

+0

Danke, ziemlich brauchbar .... obwohl die höchste Bewertung zu dem in meiner Frage erwähnten Plugin geht (welches bis phonegap 2.4.0 unterstützt) Diese Option könnte nützlich sein: aber nur beim Testen als Entwickler: "Entwickleroptionen" genannt "Aktivitäten nicht behalten". –

Antwort

1

Nicht sicher, ob es eine gute Antwort auf Ihre Frage gibt, aber ich werde versuchen.

Es hängt von einigen Faktoren ab, wenn Apps zum Freigeben von Speicher getötet werden. Der erste und wichtigste Faktor ist, wie viel die Kameraaktivität ausführen muss. Die Kamera App selbst ist auf den meisten Geräten (obwohl es variiert) um 10 MB. Dies ist die Größe der App im Speicher und nicht die Größe, die beim Ausführen der Aktivität benötigt wird, was logischerweise etwas größer wäre. Es hängt auch von der Kamera selbst und der Menge an Speicher ab, die benötigt wird, um das tatsächliche Foto zu speichern. Nehmen wir an, das Foto ist ungefähr 4 MB groß, wenn es gespeichert wird, und ungefähr 20 MB. Dies gibt uns eine ungefähre Obergrenze von 30MB für die App läuft, ist aber Spekulation und ich werde dies später selbst überprüfen und bearbeiten.

Eine gute Referenz über Speicher, den Sie hier kann auf Android im Zusammenhang https://01.org/android-ia/user-guides/android-memory-tuning-android-5.0-and-5.1 Sie Ratschläge immer 500MB oder mehr Speicher Anwendungen zur Verfügung zu laufen haben finden, ist dies natürlich für alle Anwendungen, die Sie laufen und nicht für eine bestimmte App .

Als der Punkt, dass GC beginnt, Anwendungen aus dem Speicher zu entfernen, geschieht dies sehr nahe an den tatsächlichen Grenzen des Speichers, wenn weniger als 5% noch frei ist, ist dieser Wert durch meine eigenen Experimente empirisch. Zuerst werden Apps gelöscht, die sich noch im Cache befinden, aber nicht mehr benötigt werden. Nur als letzter Ausweg werden auch Apps gelöscht, die aktiv sind.

Meine Annahme ist, dass Ihre App unter etwa 50 MB Speicher kostenlos getötet wird, obwohl ich betonen muss, dass es viele Annahmen gibt und es gibt keine allgemeine Möglichkeit, Ihnen eine gute Antwort für jedes Gerät mit jeder Art von Kamera und jede Android-Version.

Ich hoffe, es hilft, fürchte es nicht.

+0

Danke für Ihre Antwort. Die wirkliche Lösung würde wahrscheinlich von Android-Entwicklern kommen ... wenn sie nur überprüfen würden, welcher Prozess die Kamera gestartet hat, bevor sie getötet hat, um Memory zu befreien .... Nicht gerade an diesem Projekt zu arbeiten, wie Sie sagten, nicht möglich zu geben eine echte Antwort. Aber Sie geben einige gute Hinweise auf Beträge. –

1

Versuchen Sie, ein Plugin zu finden, das die Systemkamera-App nicht startet. Verwenden Sie stattdessen eine benutzerdefinierte Kameraaktivität mit nur eingeschränkten Funktionen, um die Speichernutzung zu reduzieren.