在 ICS 上,我在使用 UrlConnection 时遇到 android.os.NetworkOnMainThreadException 错误 - 即使我在运行在它自己的进程上的服务中发出此请求,并且被异步调用以通过 Messenger 完成。
更改 StrictPolicy 没有效果,我仍然得到错误。
我能做些什么?
编辑:此服务在单独的进程中运行 - 具有不同的 pid 和所有内容。
在 ICS 上,我在使用 UrlConnection 时遇到 android.os.NetworkOnMainThreadException 错误 - 即使我在运行在它自己的进程上的服务中发出此请求,并且被异步调用以通过 Messenger 完成。
更改 StrictPolicy 没有效果,我仍然得到错误。
我能做些什么?
编辑:此服务在单独的进程中运行 - 具有不同的 pid 和所有内容。
根据文档,服务仍然在主线程上运行:
请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该生成自己的线程来完成这项工作。更多信息可以在进程和线程中找到。IntentService 类可作为 Service 的标准实现使用,它有自己的线程来安排要完成的工作。
因此,对于长时间运行的任务(例如使用 UrlConnection),您应该使用IntentService 之类的东西或自己生成一个新线程。
在那里做网络的东西Thread
。抛出此异常是为了防止一些问题,例如 UI 冻结(由于网络作业,这可能需要一些时间。)