Servicio de fondo matado en Android
Hemos desarrollado una aplicación para Android que involucra un servicio en segundo plano. Para implementar este servicio de fondo hemos utilizadoIntentService
. Queremos que la aplicación encueste al servidor cada60 seconds
. Así que en elIntentService
, el servidor se sondea en un bucle while. Al final del bucle while hemos utilizadoThread.sleep(60000)
de modo que la siguiente iteración comienza solo después de 60 segundos.
Pero en elLogcat
, Veo que a veces la aplicación tarda más de 5 minutos en despertarse (salir de ese modo de dormir y comenzar la siguiente iteración). Es nunca1 minute
como queremos que sea.
¿Cuál es la razón para esto? ¿Deberían implementarse los servicios en segundo plano de una manera diferente?
Problema 2
Android mata este proceso en segundo plano (servicio de intención) después de algún tiempo. No puedo decir exactamente cuándo. Pero a veces son horas y, a veces, días antes de que el servicio en segundo plano muera. Le agradecería que me dijera la razón de esto. Porque los servicios no están destinados a ser asesinados. Están destinados a ejecutarse en segundo plano siempre que lo deseemos.
Código:
@Override
protected void onHandleIntent(Intent intent) {
boolean temp=true;
while(temp==true) {
try {
//connect to the server
//get the data and store it in the sqlite data base
}
catch(Exception e) {
Log.v("Exception", "in while loop : "+e.toString());
}
//Sleep for 60 seconds
Log.v("Sleeping", "Sleeping");
Thread.sleep(60000);
Log.v("Woke up", "Woke up");
//After this a value is extracted from a table
final Cursor cur=db.query("run_in_bg", null, null, null, null, null, null);
cur.moveToLast();
String present_value=cur.getString(0);
if(present_value==null) {
//Do nothing, let the while loop continue
}
else if( present_value.equals("false") || present_value.equals("False") ) {
//break out of the while loop
db.close();
temp=false;
Log.v("run_in_bg", "false");
Log.v("run_in_bg", "exiting while loop");
break;
}
}
}
Pero cada vez que se cancela el servicio, ocurre cuando el proceso está dormido. El último registro dice:Sleeping : Sleeping
. ¿Por qué se mata el servicio?