创建了一个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
}
}
当throw NetworkOnMainThreadException
在单独的线程上运行时IntentSrevice
如何?
请提前帮助和谢谢。
答案 0 :(得分:1)
这是因为您正在主线程上执行网络操作,而Android 3.0及更高版本不允许这样做。即使它在服务中,服务也在UI线程上运行,除非您在另一个线程中专门启动它们或在其中创建一个线程。
您可以通过使用主题或AsyncTask
在主UI线程中运行服务中的任务来解决此问题。
尝试在onStartCommand()
或者你可以做点像......
new Handler().post(new Runnable() {
@Override public void run() {
getData();
} });
答案 1 :(得分:0)
你应该在OnHandleIntent()
内进行你想要做的网络相关工作,因为这个方法在一个单独的线程上运行。
现在,网络相关工作正在主线程上运行。