• NetworkOnMainThreadException 問題解決方法

    by  • 2013/07/09 • Android, java • 0 Comments

    NetworkOnMainThreadException001

    在開發 Android APP 時常會發生一些例外(Exception)的狀況, 但是NetworkOnMainThreadException 這還真是怪的一個問題呀 !!

    在Android 2.3的裝置運行正常,在Android 4.0的裝置就會出現NetworkOnMainThreadException這個錯誤。主要是從Android 3.0開始,Thread Policy加強了限制,只要嘗試在主執行緒中進行網路操作,就會產生這個錯誤。

    解決方式有幾個:
    1.把網路操作從主執行緒中移走,你可以自己再開一個Thread,或使用AsyncTask來執行。
    2.在onCreate()中加入下列程式,透過StrictMode重新設定ThreadPolicy。

    if (android.os.Build.VERSION.SDK_INT >
    Build.VERSION_CODES.GINGERBREAD) {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads().detectDiskWrites().detectNetwork()
    .penaltyLog().build());
    }

    3.把AndroidManifest中的android:targetSdkVersion設定成"9″,也可以暫時解決,但不建議。

    最好的方式還是第一種,能避免耗時的網路操作阻礙主執行緒工作,或產生ANR錯誤,我想這也是設計此例外的原因。