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?

Respuestas a la pregunta(10)

Su respuesta a la pregunta