BloggerAds

2012年9月16日 星期日

Android - 在4.0上 NetworkOnMainThreadException 例外處理

在android2.3.3上 用HttpURLConnection 抓資料 測試沒問題


在android4.0上就出錯 


在2.3系統下開發的程序運行在4.0系統時報


android.os.NetworkOnMainThreadException異常,經過查文檔,


原來是4.0系統不允許主線程(UI線程)訪問網絡,因此導致了其異常


 


解決辦法:(在super.onCreate(savedInstanceState)前 加上紅色程式碼 


但只能在2.3或以上系統使用 也就是說你的APK是4.0 但可適用的最低系統為android2.3)


public void onCreate(Bundle savedInstanceState) {  


    


    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()


   .detectDiskReads()


   .detectDiskWrites()


   .detectNetwork() 


   .penaltyLog()


   .build());


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


   .detectLeakedSqlLiteObjects() 


   .penaltyLog() 


   .penaltyDeath()


   .build()); 


    


    super.onCreate(savedInstanceState);  


    setContentView(R.layout.config);


}




從Android 2.3 開始提供了一個新的類StrictMode,該類可以用於捕捉發生在應用程序主線程中耗時的磁盤、網絡訪問或函數調用,可以幫助開發者改進程序,使主線程處理UI 和動畫在磁盤讀寫和網絡操作時變得更平滑,避免主線程被阻塞。