本文转自:http://blog.csdn.net/debutent/article/details/8708127
以前我的socket通信的代码运行在android2.3.5手机上一点问题没有,现在入手了小米2s(系统android4.1.1)后,发现出现如下问题,期间server端打开后异常关闭,在logcat中查看到了caused by: android.os.networkonmainthreadexception错误,在http://stackoverflow.com/questions/13136539/caused-by-android-os-networkonmainthreadexception找到了答案,要在mainactivity.java的setcontentview(r.layout.activity_main)后加入以下代码
并在文件头加入,import android.os.strictmode
问题解决
对于什么是strictmode,可以参考http://www.cnblogs.com/zelos/archive/2011/02/27/1966403.html
还有一篇文章解释的更清晰:
报android.os.networkonmainthreadexception异常,经过查文档,原来是4.0系统不允许主线程(ui线程)访问网络,因此导致了其异常。在4.0之后在主线程里面执行http请求都会报这个错,也许是怕http请求时间太长造成程序假死的情况吧。
一:在发起http请求的activity里面的oncreate函数里面添加如下代码:
//详见strictmode文档
如果正在做的项目不是android 4.0的是看不到strictmode类的。
二:使用thread、runnable、handler这三个类:
开线程处理关于网络的事物,然后用handler发送消息来处理更新ui。
自己走了不少弯路。