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 derIntentService
wird 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 derLogcat
Ich 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?