我开发的应用程序在android 4.0.0版本之前工作正常。但是在android 4.0.0 +版本中,它会被强制关闭。它说网络主线程异常
答案 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版本的应用程序可以在其主要事件循环线程上进行网络连接,但是非常不鼓励这样做。
JellyBean
,ICS
和HoneyComb
和``不允许您在UI线程上执行的其他操作的一些示例是:
如果您尝试在UI线程上执行任何这些操作,则必须将它们包装在工作线程中。最简单的方法是使用AsyncTask
,它允许您在用户界面上执行异步工作。 AsyncTask将在工作线程中执行阻塞操作,并将结果发布到UI线程上,而不需要您自己处理线程和/或处理程序。
答案 1 :(得分:1)
“网络主线程异常”似乎是自我说话,不是吗?
new Thread(new Runnable() {
public void run() {
yourNetworkStuff();
}
}).start();
答案 2 :(得分:0)
错误本身表示您正在编写主线程上连接到网络(url连接)的代码。您可以编写扩展AsyncTask的Async类。它将执行其他线程。