我有一个在执行BOOT_COMPLETED时启动的服务。 我在该服务中需要的是登录我的服务器,但问题是Internet连接尚未可用。我的意思是,手机还没有完全启动。 所以我有一个带有Sleep()函数的while()循环,等待Internet连接。 问题是服务在等待20-30秒后被杀死。
这是正常的吗?我不能永远在我的服务中运行吗?
这是我的代码:
@Override public void onStart(Intent intent, int startid)
{
for(int i=1; i<=60; i++) //Let's wait 60 seconds for the Internet
{
if(IsInternetConected(MyService.this) == true)
break;
WriteLog("Waiting for internet " + i);
try{Thread.sleep(1000);} catch (InterruptedException e) { };
}
//Here it is connected to Internet or we have been waiting for too long
if(IsInternetConected(MyService.this) == false)
{ WriteLog("Not Internet. Try later");
return;
}
WriteLog("Everything Ok. Continue...");
}
public boolean IsInternetConected(Context Contexto)
{ ConnectivityManager oConnectivityManager = (ConnectivityManager) Contexto.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo oNetworkInfo = oConnectivityManager.getActiveNetworkInfo();
if(oNetworkInfo!=null && oNetworkInfo.isConnected())
return true;
return false;
}
我在日志文件中看到的是:
Waiting for internet 1
Waiting for internet 2
Waiting for internet 3
...
Waiting for internet 28
这就是全部。它在20和30左右结束。
答案 0 :(得分:1)
是的,这很正常。请参阅Service文档,其中包含:
[...]如果您的服务要进行任何CPU密集型(例如MP3播放)或阻止(例如网络)操作,它应该产生自己的线程来执行该工作。
也许你可以使用IntentService。
答案 1 :(得分:0)
如果您执行阻止UI的任何代码,您的服务将在X秒后被杀死,这是标准的。
您应该执行AsyncTask
,并将该代码放在doInBackground
上。此步骤用于执行可能需要很长时间的后台计算。