Kürzlich haben wir ein neues Galaxy S6 mit Android 5.1.1 erworben und wir haben einige Probleme mit dem neuen Samsung SPCM Speichermanager, der damit einhergeht. Es schließt aggressiv den Hintergrunddienst unserer App, der zwar auf START_STICKY gesetzt ist, aber nicht neu gestartet wird.Umgang mit Samsung SPCM Killer
Zusätzlich benötigt der Dienst nicht mehr als 5MB RAM, aber irgendwie enden wir mit der niedrigsten Punktzahl des SPCM-Algorithmus und werden ausgewählt, um getötet zu werden.
Das ist unser Service:
Public class IncomingService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
public void onCreate() {
if (mPhoneListener == null) {
mPhoneListener = new CallStateListener();
TelephonyManager tm = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
/**
* Listener for call states
* Listens for different call states
*/
private class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// Doing something with incomingNumber
}
}
Und im Manifest:
<service
android:name="com.services.IncomingService"
android:enabled="true"
android:priority="999" >
</service>
Ein Protokoll der SPCM unsere Dienstleistungen zu töten:
obwohlForce stopping com.special.app appid=10499 user=0: SPCM kill lowestscore package!
03-18 22:48:11.280 3562-3562/? I/ActivityManager: Killing 2279:com.special.app/u0a499 (adj 8): stop com.special.app cause SPCM kill lowestscore package!
03-18 22:48:11.280 3562-3562/? W/ActivityManager: Scheduling restart of crashed service com.special.app/com.services.IncomingService in 1000ms
03-18 22:48:11.280 3562-3562/? I/ActivityManager: Force stopping service ServiceRecord{27d2c408 u0 com.special.app/com.services.IncomingService}
Auch das Activity Protokoll heißt es, Wenn Sie einen Neustart für unseren Dienst neu planen, wird er nie neu gestartet.
Wir haben die gleichen SPCM Logs in Bezug auf andere Apps (Facebook, TrueCaller, etc.) gesehen, aber ihre Dienste schaffen es irgendwie neu zu starten.
So zusammenzufassen, unsere Fragen sind:
- Wie SPCM zu verhindern, dass unsere App als lowestscore Paket-Targeting?
- Wenn wir anvisiert wurden, wie kann sichergestellt werden, dass unser Dienst nach dem Absturz erfolgreich neu gestartet wird?
- Irgendwelche anderen Ideen, die uns helfen können?
Ich habe das gleiche Problem. Hast du das repariert? – kakopappa
Wir haben es geschafft aber zu vielen Dingen versucht wir sind uns nicht ganz sicher was uns geholfen hat :) Zu den Dingen gehörten: Senken des Speicherverbrauchs unserer App. Wir gehen davon aus, dass SPCM uns nicht mehr angegriffen hat. Wünsch dir Glück! – Nom1fan