我们开发了一个 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
。为什么服务会被杀死?