關(guān)于安卓高版本訪(fǎng)問(wèn)網(wǎng)絡(luò)出現(xiàn).NetworkOnMainThreadException異常的問(wèn)題

解決方法:


? 1、一是在主線(xiàn)程的onCreate()方法中加入如下代碼: StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads().detectDiskWrites().detectNetwork()

.penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()

.penaltyLog().penaltyDeath().build());

注:

? ? ? 通過(guò)查閱相關(guān)資料,發(fā)現(xiàn),自從Android 2.3之后,系統(tǒng)增加了一個(gè)類(lèi):StrictMode。這個(gè)類(lèi)對(duì)網(wǎng)絡(luò)的訪(fǎng)問(wèn)方式進(jìn)行了一定的改變。Android的官方文檔給出了這個(gè)類(lèi)設(shè)置的目的:StrictMode是一個(gè)系統(tǒng)提供的開(kāi)發(fā)工具,用以檢測(cè)在開(kāi)發(fā)過(guò)程中因?yàn)榕既坏氖鹿蕪亩斐傻南到y(tǒng)潛在的問(wèn)題,進(jìn)而提示開(kāi)發(fā)者對(duì)其進(jìn)行修復(fù)。StrictMode通常用于捕獲磁盤(pán)訪(fǎng)問(wèn)或者網(wǎng)絡(luò)訪(fǎng)問(wèn)中與主進(jìn)程之間交互產(chǎn)生的問(wèn)題,因?yàn)樵谥鬟M(jìn)程中,UI操作和一些動(dòng)作的執(zhí)行是最經(jīng)常用到的,它們之間會(huì)產(chǎn)生一定的沖突問(wèn)題。將磁盤(pán)訪(fǎng)問(wèn)和網(wǎng)絡(luò)訪(fǎng)問(wèn)從主線(xiàn)程中剝離可以使磁盤(pán)或者網(wǎng)絡(luò)的訪(fǎng)問(wèn)更加流暢,提升響應(yīng)度和用戶(hù)體驗(yàn)。

? ? ? 顯然,大多數(shù)初學(xué)者在進(jìn)行網(wǎng)絡(luò)開(kāi)發(fā)時(shí),會(huì)選擇將訪(fǎng)問(wèn)網(wǎng)絡(luò)的代碼直接放到主進(jìn)程中,由于和主進(jìn)程的首要工作——UI交互——相矛盾,因此,必須設(shè)置一定的檢測(cè)機(jī)制,以保證系統(tǒng)運(yùn)行的流暢,所有的異常都可以被檢測(cè)。 使用的時(shí)候只需要在你項(xiàng)目運(yùn)行的入口Activity的OnCreate中放入這段代碼,那么整個(gè)項(xiàng)目程序都有用。不需要每個(gè)Activity里面加入。


? ? ? 但是呢,從StrictMode類(lèi)的用途我們就可以知道這不是一個(gè)好方法。

? 2、一個(gè)比較穩(wěn)妥的方法就是使用AsyncTask,這個(gè)類(lèi)相信都不陌生。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容