Ich fordere die Speicherverwaltungstechnik von Android nicht heraus (wie es Killer tun). Ich möchte einer App nur eine höhere Priorität geben, auch wenn sie nicht im Vordergrund oder sichtbar ist (mit Benachrichtigung).
AutoKiller Memory Optimizer kann dies auf gerooteten Geräten tun, aber die Änderung dauert einige Sekunden, wenn ich Multitasking mache.
Ich möchte dies dauerhaft tun: Vielleicht sollte es funktionieren, einen Hintergrund-Daemon auszuführen, um kontinuierlich Änderungen vorzunehmen. Wie macht man das?
Auf XDA habe ich einen Beitrag gefunden, in dem diskutiert wird, wie man eine App pinnt, um nicht von OOM getötet zu werden. Da Ihre Frage anzeigt, dass Ihr Gerät gerootet ist, könnte dies für Sie nützlich sein. Das dort beschriebene Prinzip kann auch auf Ihren Fall angewendet werden, indem Sie einfach den oom_adj
angegebenen Wert ändern (das -17
würde dauerhaft PIN, höchste Priorität -- verwenden Sie also einen größeren Wert, um das zu "schwächen").
Das dort gepostete Skript sieht so aus:
#!/system/bin/sh
sleep 60
PPID=$(pidof com.estrongs.android.safer)
echo "-17" > /proc/$PPID/oom_adj
Ein anonymer Benutzer bemerkte, dass Sie diese Datei auch auf schreibgeschützte Berechtigungen setzen könnten, um zu verhindern, dass Android sie aktualisiert, indem Sie chmod 444 /proc/$PPID/oom_adj
das obige Skript ergänzen (der vorgeschlagene 444 bedeutet nichts anderes als Leseberechtigung, beeinträchtigt jedoch nicht die Fähigkeit des Systems, die Datei zu entfernen, wenn der Prozess endet). Ich habe das nicht überprüft, aber dies könnte Sie tatsächlich davor bewahren, das Skript zu wiederholen/wiederholt auszuführen, wodurch der festgelegte Wert für die Dauer des Prozesses dauerhaft wird.
Ersetzen Sie wie gesagt das -17
durch Ihren gewählten Wert. Ersetzen Sie außerdem den Paketnamen der App ( com.estrongs.android.safer
) durch den Paketnamen Ihrer Ziel-App. Sie können den sleep
Wert auch verringern oder den Schlaf ganz weglassen.
Jetzt brauchen Sie eine Möglichkeit, dies automatisch auszuführen, sobald Ihre App ausgeführt wird. Für diesen Teil könnten Sie z. B. Tasker verwenden : Kontext wäre „app running“ (und Ihre App ausgewählt) und die Aufgabe „Run Shell“ mit obigem Skript als Parameter. Sobald Sie dann Ihre App starten (und sie in den Vordergrund kommt), würde Tasker das Skript ausführen – und der oom_adj
Wert sollte angewendet werden.
Dies kann nicht über den Code einer Anwendung (Hintergrunddienst oder Thread oder was auch immer) erfolgen. Der Grund ist in diesem Beitrag gut beschrieben, http://debuggingisfun.blogspot.com/2014/03/android-foolproof-low-memory-killer.html
ROM Toolbox Pro von Jrummy hat einen integrierten OOM-Manager.
Mateen Ulhaq
Izzy
iOS
Izzy
Izzy