在開發(fā)android網(wǎng)絡(luò)程序的時(shí)候遇到一個(gè)bug,非常簡(jiǎn)單的一個(gè)apk,調(diào)用了socket與ServerSocket的應(yīng)用,在打印bug的時(shí)候發(fā)現(xiàn)是android.os.networkonmainthread,這個(gè)錯(cuò)誤主要是因?yàn)榭紤]到連接網(wǎng)絡(luò)時(shí)可能造成整個(gè)程序的阻塞,解決這個(gè)問題的方法很簡(jiǎn)單,主要有兩種方法,一是采用一種strictmode,這種方法我在某個(gè)示例程序里看到過,當(dāng)時(shí)也沒有細(xì)看,現(xiàn)在想到這個(gè)東西,
為德保等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及德保網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、德保網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
//設(shè)置虛擬機(jī)的策略
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
//.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
其實(shí)當(dāng)時(shí)那個(gè)簡(jiǎn)單的程序在服務(wù)器沒有開的時(shí)候點(diǎn)擊登錄會(huì)造成假死,也就是說(shuō)整個(gè)程序阻塞在那里,我們采用這個(gè)strictmode,不過是告訴它我們知道這個(gè)情況會(huì)發(fā)生,而且我們不在意,但是這種方法顯然是不可行的,在網(wǎng)絡(luò)開發(fā)中多線程的手段是必不可少的,所以采用多線程才是解決這個(gè)問題的方法。