android 4.0中主线程异常的网络

时间:2012-10-15 13:19:15

标签: android

我开发的应用程序在android 4.0.0版本之前工作正常。但是在android 4.0.0 +版本中,它会被强制关闭。它说网络主线程异常

3 个答案:

答案 0 :(得分:8)

您的应用程序在Android versions 3.0及更高版本上崩溃但在Android 2.x上正常运行的原因是 HoneyComb 关于UI线程的滥用,冰淇淋三明治 Jelly Bean 更为严格。例如,当运行HoneyComb或更高版本的Android设备在UI线程上检测到网络访问时,将引发NetworkOnMainThreadException

E/AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example/com.example.ExampleActivity}:android.os.NetworkOnMainThreadException

Android开发人员网站上详细记录了解决这种情况的原因:

当应用程序尝试在其主线程上执行网络操作时,抛出NetworkOnMainThreadException。仅针对Honeycomb SDK或更高版本的应用程序进行此操作。针对早期SDK版本的应用程序可以在其主要事件循环线程上进行网络连接,但是非常不鼓励这样做。 JellyBeanICSHoneyComb和``不允许您在UI线程上执行的其他操作的一些示例是:

  1. 打开套接字连接(即新套接字())。
  2. HTTP请求(即HTTPClient和HTTPUrlConnection)。
  3. 尝试连接到远程MySQL数据库。
  4. 下载文件(即Downloader.downloadFile())。
  5. 如果您尝试在UI线程上执行任何这些操作,则必须将它们包装在工作线程中。最简单的方法是使用AsyncTask,它允许您在用户界面上执行异步工作。 AsyncTask将在工作线程中执行阻塞操作,并将结果发布到UI线程上,而不需要您自己处理线程和/或处理程序。

答案 1 :(得分:1)

“网络主线程异常”似乎是自我说话,不是吗?

    new Thread(new Runnable() {
        public void run() {
            yourNetworkStuff();
        }
    }).start();

答案 2 :(得分:0)

错误本身表示您正在编写主线程上连接到网络(url连接)的代码。您可以编写扩展AsyncTask的Async类。它将执行其他线程。