android.os.NetworkOnMainThreadException,androidexception

來源:互聯網
上載者:User

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();
唯一沒有試好的訊息處理機制,也就是下載完成後的通知。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.