Hintergrunddienst, der in Android getötet wird

Wir haben eine Android-Anwendung entwickelt, die einen Dienst im Hintergrund beinhaltet. Um diesen Hintergrunddienst zu implementieren, haben wir verwendetIntentService. Wir möchten, dass die Anwendung den Server alle abfragt60 seconds. Also in derIntentServicewird der Server in einer while-Schleife abgefragt. Am Ende der while-Schleife haben wir verwendetThread.sleep(60000) Damit startet die nächste Iteration erst nach 60 Sekunden.
Aber in derLogcatIch sehe, dass es manchmal mehr als 5 Minuten dauert, bis die Anwendung aufwacht (verlassen Sie den Schlaf und starten Sie die nächste Iteration). Es ist nie1 minute wie wir es wollen.

Was ist der Grund dafür? Sollten Hintergrunddienste anders implementiert werden?

Problem2

Android bricht diesen Hintergrundprozess (Vorsatzdienst) nach einiger Zeit ab. Kann nicht genau sagen wann. Aber manchmal sind es Stunden und manchmal Tage, bevor der Hintergrunddienst beendet wird. Ich würde es begrüßen, wenn Sie mir den Grund dafür mitteilen würden. Weil Services nicht dafür gedacht sind, getötet zu werden. Sie sollen so lange im Hintergrund laufen, wie wir wollen.

Code:

@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;
    }
  }

}

Aber wenn der Dienst beendet wird, passiert es, wenn der Prozess eingeschlafen ist. Das letzte Protokoll lautet -Sleeping : Sleeping. Warum wird der Dienst beendet?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage