意图服务中的静态块抛出NetworkOnMainThreadException

时间:2015-09-17 09:12:26

标签: android static intentservice

创建了一个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如何?

请提前帮助和谢谢。

2 个答案:

答案 0 :(得分:1)

这是因为您正在主线程上执行网络操作,而Android 3.0及更高版本不允许这样做。即使它在服务中,服务也在UI线程上运行,除非您在另一个线程中专门启动它们或在其中创建一个线程。

您可以通过使用主题或AsyncTask在主UI线程中运行服务中的任务来解决此问题。

尝试在onStartCommand()

中创建新主题

或者你可以做点像......

new Handler().post(new Runnable() { 
@Override public void run() {
 getData(); 
} });

答案 1 :(得分:0)

你应该在OnHandleIntent()内进行你想要做的网络相关工作,因为这个方法在一个单独的线程上运行。

现在,网络相关工作正在主线程上运行。