创建了一个IntentService
,其中我创建了一个静态块,其中我正在做一些与网络相关的工作,在此基础上给出NetworkOnMainThreadException
:代码看起来像:
public class XService extends IntentService {
static {
//Net related work
//on executing this gives NetworkOnMainThreadException
}
@Override
protected void onHandleIntent(Intent intent) {
//Doing my work here
}
}
当IntentSrevice
在单独的线程上运行时,throw NetworkOnMainThreadException
如何运行?
请提前帮助和感谢。
这是因为你正在主线程上进行网络操作,而这在Android 3.0及以上版本是不允许的。即使它是在一个服务中,服务也在UI线程上运行,除非你在另一个线程中启动它们或在其中创建一个线程。
你可以通过在主UI线程之外的服务中运行任务来解决这个问题,通过使用thread或AsyncTask
。
尝试在onStartCommand()
中创建一个新线程
或者你可以这样做…
new Handler().post(new Runnable() {
@Override public void run() {
getData();
} });
您应该在OnHandleIntent()
中完成与网络相关的工作,因为该方法在单独的线程上运行。
你放置网络相关工作的地方现在在主线程上运行。