android.os.NetworkOnMainThreadException,而实际上并没有在MainThread中运行

时间:2014-04-12 11:13:55

标签: android multithreading sockets

以前有很多关于android.os.NetworkOnMainThreadException异常的问题,这实际上是android防止我们冻结UI的一种保护措施。

从另一个线程(因此,而不是MainThread)打开套接字应解决此问题:

Thread t = new Thread (new Runnable() { 
        @Override
        public void run() {
            try{
            Socket socket = new Socket ( SOME_IP_AS_STRING , SOME_PORT_AS_INT);
                    // do some IO with socket
            }
            catch (Exception e) {} 
            } 
            });

        t.run();

但是,此代码抛出了上述异常 - android.os.NetworkOnMainThreadException, 并且在调试时(使用Android Studio),看起来run()似乎在MainThread下运行,这没有任何意义。

我在哪里弄错了?

2 个答案:

答案 0 :(得分:1)

您正在调用.run(),其中在主Thread主题中运行UI。您需要拨打.start()来避免它。

答案 1 :(得分:0)

应用程序尝试在其主线程上执行网络操作时引发的异常。尝试在AsyncTask中运行您的代码,有关详细信息,请参阅here