android.os.NetworkOnMainThreadException,androidexception
android.os.NetworkOnMainThreadException異常
問題描述:
android.os.NetworkOnMainThreadException
問題分析:
Android從 2.3開始提供了一個新的類 StrictMode,該類可以用於捕捉髮生在應用程式主線程中耗時的磁碟、網路訪問或函數調用,可以協助開發人員改進程式,使主線程處理 UI和動畫在磁碟讀寫和網路操作時變得更平滑,避免主線程被阻塞。所以當你在UI線程中進行有關網路的操作時,Android2.3及以上版本會拋出android.os.NetworkOnMainThreadException異常,如:
解決辦法:
造成這樣的錯誤原因是代碼不符合Android規範,如果把網路的訪問方式改為非同步作業或另外開啟一個線程進行有關網路操作。就不會出現在Android2.3及以上進行網路操作出現 android.os.NetworkOnMainThreadException異常。
androidosnetworkonmainthreadexception怎解決
在android2.3之後 在主線程中必須使用另一個線程 如handler機制,或者非同步任務擷取網路資料
如果你訪問網路的操作 必須放在主線程中執行,那麼 在oncreate()中添加
if (GetVersion.GetSystemVersion() > 2.3) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
.build());
}
這樣 高版本中也可以在主線程中執行網路操作了
android socket編程
我上周也在試網路下載問題,遇到你同樣的問題,我也是剛解決,這個下載要放線上程中,
而不能在主線程中;產生線程的架構是:
new Thread(new Runnable()
{
public void run()
{
// 下載程式片段
}
}).start();
唯一沒有試好的訊息處理機制,也就是下載完成後的通知。