2013年3月3日 星期日

NetworkOnMainThreadException解決之道

先前開發 Android 的目標版本使用Android 2.3.3,後來開發的 App 需要去網路上抓取一些資訊

不加思索使用模擬器開發測試沒有問題以後就發佈到 Market,

沒想到在手機上卻怎麼樣也顯示不出來!後來查看LogCat 出現NetworkOnMainThreadException

查找 Android Developer Doc 後才知道這個問題是自Honeycomb(Android 3.0) 後開始檢查在主執行緒使用網路存取或I/O存取,

避免程式沒有回應(Application Not Responding)的情況,簡稱ANR。

當 App 開啟的時候在主執行緒中使用網路存取,Android 將會強制拋出 Exception

解決之道即是將網路存取的相關工作改藉由另一條執行緒執行即可
new Thread() {
public void run() {
//網路存取寫在這
}
}.start();


其實這個寫法不論是什麼樣的程式語言,都應該盡量採取這個作法!

避免程式使用時User以為當掉。

這次經驗發覺 Android 的開發目標還是盡可能選擇最新的版本,

避免程式在某些情況下沒有考慮到!

沒有留言:

張貼留言