服务器中的android.os.NetworkOnMainThreadException在一个单独的进程中

时间:2012-04-08 06:44:27

标签: android networkonmainthread

在ICS上,我在使用UrlConnection时遇到android.os.NetworkOnMainThreadException错误 - 即使我在一个运行在它自己的进程上的服务中发出此请求,并且被异步调用以通过Messenger完成。 / p>

更改StrictPolicy无效,我仍然收到错误。

我该怎么办?

编辑:此服务在一个单独的进程中运行 - 具有不同的pid和所有内容。

2 个答案:

答案 0 :(得分:4)

根据documentation

,服务仍在主线程上运行
  

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要进行任何CPU密集型(例如MP3播放)或阻止(例如网络)操作,它应该生成自己的线程来执行该工作。有关此内容的更多信息,请参见进程和线程。 IntentService类可用作Service的标准实现,它具有自己的线程,用于调度其工作。

因此,对于长时间运行的任务(例如使用UrlConnection),您应该使用IntentService之类的东西,或者自己生成新的线程。

答案 1 :(得分:0)

在那里Thread进行网络搜索。抛出此异常是为了防止一些问题,例如UI冻结(因为网络作业,可能需要一些时间。)