Gibt es eine Möglichkeit (mit root?) Zu verhindern, dass Android Task Killer bestimmte Apps tötet?

7

Ich möchte, dass eine Browser-App (FireFox) nicht ab und zu vom Taskkiller des Systems getötet wird, da ich bestimmte Einzelseitenanwendungen verwenden möchte, die einige Daten enthalten und nicht sehr schnell geladen werden. Gibt es eine Möglichkeit, damit umzugehen, auch wenn root erforderlich ist?

Vor einiger Zeit habe ich mein Gerät von 1 GB RAM auf ein anderes aktualisiert, 3 GB RAM und alles lief gut (der Browser wurde angehalten, um überhaupt getötet zu werden). Aber nach einem Systemupdate im Januar 2016 wurde es noch schlimmer. Jetzt wird FireFox normalerweise sogar getötet, nachdem ein Wecker klingelte oder ich eine Kamera-App geöffnet habe. Dies ist ein wichtiges Thema für mich, daher freue ich mich über jede Hilfe.

PS ja, ich habe Einstellungen → Batterie → Batterieoptimierung ausprobiert, wobei ich beide FF zu Ausnahmen hinzugefügt habe (hat nicht geholfen) und die Batterieoptimierung überhaupt aktiviert hat (hat auch nicht geholfen).

YakovL
quelle

Antworten:

8

Tl; dr

Mit root können Sie oom_adjWerte anpassen , um zu verhindern, dass Apps beendet werden. Alternativ können Sie die Ziel-App zwingen, im Speicher zu bleiben, indem Sie sie "sperren" oder einige verwandte Einstellungen ändern, die für das Beenden von Apps bei geringem Arbeitsspeicher verantwortlich sind.


Hintergrund: Android RAM Management

Android verwendet eine andere Art der Handhabung von Prozessen. Anstatt jeden Prozess nach Beendigung seiner Aktivität zu beenden, werden die Prozesse so lange beibehalten, bis das System mehr Speicher benötigt. Die Idee ist, die Geschwindigkeit zu verbessern, wenn Sie diese Aktivität erneut starten. Aber wie / wann beendet Android einen Prozess, wenn es mehr Speicher benötigt und welcher Prozess zuerst beendet werden muss?

Dies wird vom LMK-Treiber (Low Memory Killer) von Android verwaltet. Möglicherweise wissen Sie bereits, dass jeder App / jedem Prozess in Android ein oom_adjWert zugewiesen ist, der die Wahrscheinlichkeit angibt, dass er bei einer OOM-Situation (Out of Memory) beendet wird. Je höher der Wert, desto wahrscheinlicher ist es, dass er getötet wird. Gültiger Bereich ist -17bis +15. (Wenn in der -17Reichweite bedeutet, dass es nicht getötet wird). Demnach gibt es sechs Gruppen (OOM-Gruppen), in die Apps / Prozesse eingeteilt sind:

  1. Vordergrund App
  2. Sichtbare App
  3. Sekundärserver
  4. Versteckte App
  5. Inhalt Anbieter
  6. Leere App

Grundsätzlich könnten diese beschrieben werden als:

FOREGROUND_APP: Dies ist der Prozess, bei dem die aktuelle Vordergrund-App ausgeführt wird. Wir wollen es wirklich lieber nicht töten!

VISIBLE_APP: Dies ist ein Prozess, bei dem nur Aktivitäten gehostet werden, die für den Benutzer sichtbar sind. Wir möchten daher, dass sie nicht verschwinden.

SECONDARY_SERVER: Dies ist ein Prozess, der einen sekundären Server enthält. Das Beenden dieses Servers hat für den Benutzer keine großen Auswirkungen.

HIDDEN_APP: Dies ist ein Prozess, bei dem nur Aktivitäten gehostet werden, die nicht sichtbar sind, sodass er ohne Unterbrechung beendet werden kann.

CONTENT_PROVIDER: Dies ist ein Prozess mit einem Inhaltsanbieter, an den keine Clients angeschlossen sind. Wenn es Kunden hätte, wäre seine Anpassung diejenige mit der höchsten Priorität dieser Prozesse.

EMPTY_APP: Dies ist ein Prozess, in dem derzeit nichts ausgeführt wird. Auf jeden Fall der erste, der geht.

Diese Gruppen werden durch oom_adjWertelimits definiert , und Apps fallen entsprechend oom_adjdem dieser bestimmten App zugewiesenen Wert in eine dieser Gruppen . "Vordergrund-Apps" haben normalerweise einen oom_adjWert von 0oder weniger (daher sind sie am wenigsten tötbar, dh mit hoher Priorität).

"Leere Apps" haben eine höhere oom_adj(sie werden vorzeitig beendet; dh niedrige Priorität). Außerdem oom_adjändert sich der Wert je nach Status der Benutzer-App. 0Dies ist der Fall , wenn die App im Vordergrund aktiv ist und einen höheren Wert erhält, wenn die App in den Hintergrund tritt.

Warum unterscheiden sich ihre "Tötbarkeit"? Apps, die zu diesen verschiedenen Gruppen gehören (die unterschiedliche Gruppen haben oom_adj's), werden auf verschiedenen Ebenen des freien Arbeitsspeichers getötet. Diese auslösenden RAM-Grenzen werden durch die LMK-Minfree-Werte definiert. Die obigen 6 Kategorien entsprechen 6 RAM-Grenzwerten, die im LMK-Minifree festgelegt sind. Beispiel: Stock Android 4.3 in meinem Gerät kommt mit den minfree Werten von 48,60,72,84,96,120. (diese sind in MB).

Geben Sie hier die Bildbeschreibung ein

Praktisch bedeutet dies, dass leere Apps getötet werden, wenn der RAM-Wert unter 120 MB sinkt, Inhaltsanbieter, wenn der RAM-Wert unter 96 MB sinkt, versteckte Apps, wenn der Speicherwert unter 84 MB liegt usw. (Möglicherweise stellen Sie fest, dass dieser letzte Wert (48 MB) nicht wünschenswert ist, wenn speicherintensive Apps wie schwere Spiele verwendet werden.)

NB:

  1. Im neueren Kernel oom_ score _adjwird anstelle des alten verwendet oom_adj. (Der gültige Bereich für oom_score_adj liegt zwischen -1000 und 1000). Wird oom_adjaber auch aus Gründen der Kompatibilität beibehalten.

  2. Es wird gesagt, dass es viele OOM-Prozesskategorien gibt, denen von den verschiedenen oom_adjPrioritäten zugewiesen werden ActivityManagerService, aber letztendlich würden alle unter den oben genannten sechs Slots / Gruppen (gemäß oom_limits) berücksichtigt, um durch die minkfreien LMK-Trigger getötet zu werden. Daher sind diese sechs für normale Benutzer wichtig.

    • Mit dieser Memory Manager-App können wir die minfree-Werte überprüfen (auch ändern) und die OOM-Gruppierungen von Apps / Prozessen einfach anzeigen.
  3. Nicht jedes Gerät hat dieselbe OOM-Konfiguration.


Verbesserung der RAM-Verwaltung

Heutzutage gibt es eine benutzerfreundliche Implementierung des RAM-Verwaltungsmechanismus mit Benutzeroberfläche in den Systemeinstellungen (z. B. App-Optimierung in den Batterieeinstellungen, geschützte Apps in einigen ROMs, z. B. Huawei EMUI usw.), die den gleichen Effekt wie oben beschrieben haben können:

Geben Sie hier die Bildbeschreibung ein

Trotzdem können wir jetzt untersuchen, wie RAM verwendet werden kann, ohne Vordergrundanwendungen zu oft zu beenden. Die Zielbereiche umfassen:

1. Anpassen der Minifree-Werte an die eigenen Bedürfnisse

2. Sperren von Apps im Speicher, um zu verhindern, dass sie getötet werden

3.Die versteckte App-Grenze von Android überschreiben


  1. Minifreie Werte anpassen

    • Sie können die minfree-Werte mit dem Speichermanager ändern und auf Anwenden tippen. (Zusätzlich gibt es eine Option "Beim Booten anwenden" und ein Häkchen, um die Einstellungen für alle Boots beizubehalten.) Dies können mehrere Apps erreichen, z. B. Memory Manager , Minfree Manager usw.

    • Alternativ können Sie terminal / adb mithilfe von Seiten verwenden:

      #!/system/bin/sh echo “values” > /sys/module
      
  2. Sperren von Apps, um im Speicher zu bleiben (damit sie resident werden)

a) Verwenden der App-Einstellungen (Xposed)

  • Eine einfache Methode ist das Xposed-Modul, App-Einstellungen (Sie müssen das Xposed-Framework installiert haben).
  • Laden Sie nach der Installation des Frameworks das Modul "App-Einstellungen" über das Xposed-Installationsprogramm herunter.
  • Öffnen Sie die App-Einstellungen und lassen Sie die Anwendungen laden. Wählen Sie die Ziel-App aus (in diesem Fall Firefox-Browser ).
  • Aktivieren Sie auf der Einstellungsseite das Umschalten und Aktivieren des Bearbeitungsmodus, aktivieren Sie die Option "Resident" und speichern Sie. ( Wenn Apps resident bleiben, bleibt der Speicher der Apps erhalten, ohne dass sie getötet werden. Es wird empfohlen, die Schaltfläche zum Beenden in der Zielanwendung zu verwenden, wenn sie nicht mehr benötigt wird. Andernfalls wird der Speicher anderer Apps entzogen.)

Geben Sie hier die Bildbeschreibung ein

b) Verwenden von Memory Locker

Eine weitere Implementierung dieses Konzepts besteht darin, die Zielanwendung im Speicher zu sperren, indem die Systemdateien für die Einstellung oom_adjaller laufenden Prozesse gesteuert werden.

So funktioniert die Anwendung:

Memory Locker steuert Dateien im Verzeichnis / data sowie Systemdateien im Stammverzeichnis, um oom_adj für die Ausführung von Prozessen festzulegen.

Alle gesperrten Anwendungen werden nach jedem Neustart automatisch gesperrt. Apps werden als heruntergeladene / System-Apps klassifiziert, um ausgewählte Ziel-Apps zu entsperren und auf die Sperre auf der rechten Seite zu klicken. (Sie können optional die oom_adj Priorität festlegen )

  1. Überschreiben des versteckten App-Limits

    • Zusätzlich zum Mechanismus zum Beenden des Arbeitsspeichers gibt es einen weiteren Parameter, der das Beenden versteckter und leerer Apps steuert. Apps werden getötet, wenn sie bestimmte Grenzen überschreiten.

    • Es gibt eine build.prop-Einstellung, die dies steuern kann (Standard ist normalerweise eine niedrige Zahl unter 25, und durch Ändern dieser Einstellung kann dieser Wert auf einen viel größeren Wert wie 80 erhöht werden).

    • Fügen Sie diese Zeile zur Datei build.prop in / system hinzu und lassen Sie eine weitere leere Zeile darunter (stellen Sie sicher, dass Sie zuerst eine Sicherungskopie erstellen).

ro.sys.fw.bg_apps_limit=80


Referenzen und Credits

  1. Android RAM Management ( Sonderpunkte : mrhnet )
  2. Memory Locker
  3. Xposed - Allgemeine Informationen, Versionen und Änderungsprotokoll
xavier_fakerat
quelle
Vielen Dank für diese sehr ausführliche Erklärung. Dies verdient höchstwahrscheinlich die Prämie, aber lassen Sie mich darüber nachdenken und zuerst einige Fragen stellen. Die erste Frage lautet übrigens: Ohne Rooting gibt es keine Möglichkeit, das Problem zu lösen, außer viele Apps zu löschen und zu hoffen, dass der Speicher weniger geladen wird.
YakovL
Eine andere Frage ist: Welche Werte kann ich ohne Rooting sehen? Ich habe einen einfachen Test gemacht, bei dem ich von FF zu einer Foto-App gewechselt und andere gekoppelt habe und zurück zu FF gewechselt bin, und es wurde entladen und wieder geladen. Laut Plots von Simple System Monitor gab es zu jedem Zeitpunkt mindestens 300 MB freien RAM (viel mehr als 120 MB) und FF wurde immer noch entladen ...
YakovL
1. Ich denke nicht, dass es möglich ist, es manuell ohne root zu machen, da Sie viele Systemdateien optimieren müssen, während das Anpassen der Werte und solche Unordnung erhöhte Berechtigungen oder root erfordert.
Xavier_Fakerat
2. Was Android als "Free RAM" bezeichnet, ist nicht unbedingt kostenlos, da ein großer Teil davon zwischengespeicherter Speicher ist (nützlich für die schnelle Ausführung von Apps beim Neustart), sodass der tatsächliche freie Speicher sogar unter dem minimalen Wert von beispielsweise 120 MB liegt dieser Fall. Gute Nachrichten, die meisten Entwickler codieren jetzt die Einstellungen in ihrem ROM fest, damit Nicht-Root-Benutzer dies problemlos erreichen können
xavier_fakerat
Mach dir keine Sorgen um Kopfgeld, versuche zuerst, so viele Antworten (noch bessere Antworten) von anderen Benutzern zu erhalten, damit du die hilfreichste Lösung
findest
1

RAM Manager behauptet, mit dieser App bestimmte Apps von der RAM-Verwaltungsmechanik von Android sperren zu können.

Alternativ gehen Sie zu Einstellungen → Batterie → Batterieoptimierung und setzen Sie Firefox auf Nicht optimieren kann etwas helfen.

iBug
quelle
Ja, ich habe die zweite Option ausprobiert und auch versucht, die Optimierung überhaupt auszuschalten, das hilft nicht. Können Sie angeben, wo genau RAM Manager dies behauptet? Soweit ich sehen kann, kann nur für bestimmte Apps (genauer gesagt für Launcher) eine eigene Optimierung vermieden werden. Aber der gute Punkt ist - ich sollte mir Apps ansehen, die versuchen, LMK zu steuern, und vielleicht diejenigen fragen, die sie entwickeln - sie haben wahrscheinlich zusätzliches Wissen.
YakovL
1

Der obige Beitrag ist sehr gründlich, aber ich werde Anweisungen für einige bestimmte Modelle hinzufügen (gestohlen von der ASM-App-Seite). Beachten Sie, dass bei Apps, die mehr Speicher benötigen (z. B. Firefox), das System die App wahrscheinlich ohnehin ohnehin beendet, wenn andere Apps Speicherplatz anfordern. Wenn der zwischengespeicherte RAM benötigt wird, stehen die größten und ältesten Apps unabhängig von den Einstellungen zum Energiesparen an erster Stelle, und Firefox ist ein großer Geldgeber.


Wie gehe ich mit (bekannten) Batteriesparern um?

Samsung Fügen Sie unter Android-Einstellungen> Gerätewartung> Akku eine App zur Liste der nicht überwachten Apps hinzu

Huawei (abhängig von den Modellen) Fügen Sie unter Android-Einstellungen> Erweiterte Einstellungen> Akku-Manager eine App zur Liste der geschützten Apps hinzu oder: Akku> Apps nach Bildschirmsperre schließen, deaktivieren Sie die Option App auf dem Bildschirm sperren

Xiaomi Wählen Sie in Ihrer Sicherheits-App: Akku%> App-Batteriesparmodus die Option App und dann Keine Einschränkungen aus und: In Ihrer Sicherheits-App: Berechtigungen> Autostart den Start der App zulassen.

Asus (Zenfone) Öffnen Sie Ihren Autostart-Manager und lassen Sie die App starten.

OnePlus Aktivieren Sie unter Android-Einstellungen> Akku> Menü> Aggressiver Schlaf- und App-Ruhezustand die App, um sie von den optimierten Apps auszuschließen.

Infinix Öffnen Sie Ihre Xmanager-App, den Auto-Start-Manager, und lassen Sie die App starten.

Zediiiii
quelle