Ich entwickle mich in NDK
. Es hängt in Galaxy S3
. Zum Testen setze ich android:largeheap = "true"
in Manifest
. Dann gab es kein hängendes Problem.
Ist es eine gute Vorgehensweise, largeHeap="true"
zu verwenden?
Besteht die Möglichkeit, dass Google mein Build aufgrund dieses Tags ablehnt und
Wie kann ich verhindern, dass meine App hängen bleibt, ohne largeheap="true"
zu verwenden?
Nein, Wenn Sie es brauchen ist es kein schlechter pactise, weil es dafür da ist.
Offizielles Dokument sagt
Ob die Prozesse Ihrer Anwendung mit einem großen erstellt werden sollen Dalvik-Haufen. Dies gilt für alle Prozesse, die für die Anwendung.
Es gilt nur für die erste Anwendung, die in eine geladen wird verarbeiten; wenn Sie eine freigegebene Benutzer-ID verwenden, um mehrere zuzulassen Anwendungen, um einen Prozess zu verwenden, müssen alle diese Option verwenden konsequent oder sie werden unvorhersehbare Ergebnisse haben.
Die meisten Apps sollten brauche dies nicht und sollte stattdessen darauf konzentrieren, ihre Gesamtmenge zu reduzieren Speichernutzung für verbesserte Leistung . Das Aktivieren funktioniert auch nicht garantieren einen festen Anstieg des verfügbaren Speichers, weil einige Geräte sind durch ihren gesamten verfügbaren Speicher beschränkt.
Einige Entwickler verwenden es, um OOM-Exception zu vermeiden. Wenn Sie es also nur zur Vermeidung von OOM verwenden, ist das ein sehr sehr schlechter Pakt.
Niemals einen großen Heap anfordern, nur weil Sie nicht genügend Arbeitsspeicher haben und Sie brauchen eine schnelle Lösung . Sie sollten es nur verwenden, wenn Sie genau wissen wo all dein Speicher zugewiesen wird und warum er beibehalten werden muss
Wenn Sie tatsächlich mehr Speicherplatz benötigen, ist es in Ordnung, zu verwenden. Sie können getMemoryClass()
, um den Heap zu überprüfen und getLargeMemoryClass()
großer Heap.
Aber wenn Sie vermeiden können, den largeHeap zu verwenden, wäre es der beste Weg zu gehen, da die offizielle Dokumentation weitergeht:
Aber selbst wenn Sie sicher sind, dass Ihre App den großen Haufen rechtfertigen kann, Sie sollten es vermeiden, es so weit wie möglich anzufordern . Verwendung der zusätzlicher Speicher wird zunehmend zum Nachteil des gesamten Benutzers Erfahrung, da Garbage Collection länger dauern und System Die Leistung kann langsamer sein, wenn die Task umgeschaltet oder andere Aufgaben ausgeführt werden gemeinsame Operationen.
Außerdem ist die große Heap-Größe nicht die Dasselbe gilt für alle Geräte und kann genauso sein wie der normale Heap Größe . Wenn Sie also die große Heap-Größe anfordern, sollten Sie anrufen getMemoryClass (), um die normale Größe des Heapspeichers zu überprüfen und immer zu versuchen bleib unter dieser Grenze.
Ich schlage auch vor, dass Sie sich hier den Speicher Ihrer App verwalten ansehen
Ich persönlich würde sagen, dass es nicht wirklich in die Kategorie "gute / schlechte Praxis" fällt, wenn es richtig verwendet wird.
Laut den Dokumenten :
Die meisten Apps sollten dies nicht benötigen und sollten sich stattdessen auf das Reduzieren konzentrieren ihre Gesamtspeicherauslastung für verbesserte Leistung. Aktivieren Sie dies garantiert auch keine feste Erhöhung des verfügbaren Speichers, weil Einige Geräte sind durch ihren gesamten verfügbaren Speicher eingeschränkt.
Wenn Sie alles in Ihrer Macht haben, die Speicherauslastung zu reduzieren und sie immer noch benötigen, ist es nicht schlecht, sie zu verwenden.
Wenn deine App hängt, musst du das direkt ansprechen - das largeHeap
ist kein Zauberstab, der Probleme für alle Geräte verschwinden lässt. Dieser Punkt wird aus dem folgenden Auszug der Android-Schulungsdokumente deutlich:
[Die] Möglichkeit, einen großen Heap anzufordern, ist nur für a gedacht kleine Apps, die die Notwendigkeit rechtfertigen, mehr RAM zu verbrauchen (z. B. als eine große Fotobearbeitungs-App). Nie fordern Sie einfach einen großen Heap an weil dir der Speicher ausgegangen ist und du eine schnelle Lösung brauchst - solltest du benutze es nur, wenn du genau weißt, wo all dein Gedächtnis ist zugeordnet und warum es beibehalten werden muss. - (Quelle)
Ich sollte auch hinzufügen, dass Google nicht Ihre App für die Verwendung ablehnt.
Tags und Links android android-ndk