Lidiando con el asesino de Samsung SPCM
Últimamente adquirimos un nuevo Galaxy S6 con Android 5.1.1 y tenemos algunos problemas con el nuevo administrador de memoria Samsung SPCM que viene con él. Está cerrando agresivamente el servicio en segundo plano de nuestra aplicación, que aunque está configurado en START_STICKY, no se reinicia.
Además, el servicio no requiere más de 5 MB de RAM, pero de alguna manera terminamos con la puntuación más baja del algoritmo SPCM y somos elegidos para ser asesinados.
Este es nuestro servicio:
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
}
}
Y en el manifiesto:
<service
android:name="com.services.IncomingService"
android:enabled="true"
android:priority="999" >
</service>
Un registro de SPCM que mata nuestros servicios:
Force 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}
Aunque el registro de ActivityManager indica que está reprogramando un reinicio para nuestro servicio, en realidad nunca se reinicia.
Hemos visto los mismos registros de SPCM con respecto a otras aplicaciones (Facebook, TrueCaller, etc.) pero sus servicios de alguna manera logran reiniciarse.
En resumen, nuestras preguntas son:
¿Cómo evitar que SPCM apunte a nuestra aplicación como paquete lowestscore?Si hemos sido atacados, ¿cómo asegurarnos de que nuestro servicio se reinicie con éxito después de ser asesinado?¿Alguna otra idea que nos pueda ayudar?