android - Intent 服务中的静态 block 抛出 NetworkOnMainThreadException

标签 android static intentservice

创建了一个 IntentService,我在其中创建了一个静态 block ,我在其中进行了一些与网络相关的工作,它给出了 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 在单独的线程上运行时,如何抛出 NetworkOnMainThreadException

请帮助并提前致谢。

最佳答案

出现这种情况是因为你在主线程上进行网络操作,而这在Android 3.0及以上版本是不允许的。即使它在服务中,服务也会在 UI 线程上运行,除非您专门在另一个线程中启动它们或在其中创建一个线程。

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

尝试在 onStartCommand() 中创建一个新线程

或者你可以做类似...

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

关于android - Intent 服务中的静态 block 抛出 NetworkOnMainThreadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32626577/

相关文章:

java - 为什么我不能使用静态上下文中的 "super"变量,即使 "super"指的是父类而不是类实例,这与 "this"不同?

哈希表中的asp.net静态缓存

使用 getter 和 setter 存储全局 std::string 标签的 C++ 策略

Android如何检查 Intent 服务是否仍在运行或已停止运行

android - 与 IntentService 的线程同步

Android 按钮状态以编程方式在 Java 中(不是 XML)

java - 如何将 Location 对象放入 Parcelable

android - 在android的AsyncTask中长时间运行XML解析时如何避免ANR?

android - 从工作线程调用ui线程

java - Activity 识别 API 未检测到位置变化 - Android OREO