Мы разработали приложение для Android, которое включает сервис в фоновом режиме. Для реализации этой фоновой службы мы использовали IntentService
. Мы хотим, чтобы приложение опросило сервер каждые 60 seconds
. Таким образом, в IntentService
сервер опрошен в цикле while. В конце цикла while мы использовали Thread.sleep(60000)
, так что следующая итерация начинается только через 60 секунд.
Но в Logcat
я вижу, что иногда требуется приложение более 5 минут, чтобы проснуться ( выйти из этого сна и начать следующую итерацию). Это никогда не 1 minute
, как мы хотим.
В чем причина этого? Если фоновые службы будут реализованы по-другому?
задачи2
Android иногда убивает этот фоновый процесс (услуга намерения). Не могу точно сказать, когда. Но иногда его часы, а иногда и дни до того, как фоновая служба убита. Буду признателен, если вы скажете мне причину этого. Потому что Службы не предназначены для убийства. Они предназначены для работы в фоновом режиме, пока мы этого хотим.
Код:
@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;
}
}
}
Но всякий раз, когда служба убивается, это происходит, когда процесс засыпает. Последний журнал читает - Sleeping : Sleeping
. Почему служба убивается?