启动时服务中断

时间:2014-07-10 10:28:32

标签: android service

我有一个在执行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左右结束。

2 个答案:

答案 0 :(得分:1)

是的,这很正常。请参阅Service文档,其中包含:

  

[...]如果您的服务要进行任何CPU密集型(例如MP3播放)或阻止(例如网络)操作,它应该产生自己的线程来执行该工作。

也许你可以使用IntentService

答案 1 :(得分:0)

如果您执行阻止UI的任何代码,您的服务将在X秒后被杀死,这是标准的。

您应该执行AsyncTask,并将该代码放在doInBackground上。此步骤用于执行可能需要很长时间的后台计算。