本文轉自: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。
自己走了不少彎路。