在開發android網絡程序的時候遇到一個bug,非常簡單的一個apk,調用了socket與ServerSocket的應用,在打印bug的時候發現是android.os.networkonmainthread,這個錯誤主要是因爲考慮到連接網絡時可能造成整個程序的阻塞,解決這個問題的方法很簡單,主要有兩種方法,一是採用一種strictmode,這種方法我在某個示例程序裏看到過,當時也沒有細看,現在想到這個東西,
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
//設置虛擬機的策略
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
//.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
其實當時那個簡單的程序在服務器沒有開的時候點擊登錄會造成假死,也就是說整個程序阻塞在那裏,我們採用這個strictmode,不過是告訴它我們知道這個情況會發生,而且我們不在意,但是這種方法顯然是不可行的,在網絡開發中多線程的手段是必不可少的,所以採用多線程纔是解決這個問題的方法。