Android主線程不能訪問網路異常解決辦法

來源:互聯網
上載者:User

標籤:android   blog   http   io   os   ar   java   sp   div   

Android主線程不能訪問網路異常解決辦法從兩個方面說下這個問題:

1. 不讓訪問網路的原因

2. 解決該問題的辦法

不讓訪問網路的原因:

由於對於網路狀況的不可預見性,很有可能在網路訪問的時候造成阻塞,那麼這樣一來我們的主線程UI線程 就會出現假死的現象,產生很不好的使用者體驗。所以,預設的情況下如果直接在主線程中訪問就報出了這個異常,名字是NetworkOnMainThreadException

解決該問題的辦法

1. 獨立線程

2. 非同步線程AsyncTask

3. StrictMode修改預設的策略

1) 獨立線程的辦法

啟動一個新線程的代碼:
new Thread(){

@Override

public void run() {

Dosomething();

handler.sendEmptyMessage(0);

}

}.start();

此處我們重寫了線程類的run方法,執行Dosomething. 在裡面還有個handler對象,這又涉及到了跨線程修改UI元素內容的問題。在java中是不允許跨線程修改UI元素的,如我們在新啟動的線程中想去修改UI主線程中TextView的文本時,會報錯誤的。如果想做這樣的操作,我們就得藉助Handler這個類來實現。 關於這個handler類的用法,我們單獨的再來寫一篇部落格進行介紹。

2) 非同步呼叫的方法 AsyncTask

這裡關於AsyncTask 介紹的文章不錯, 詳細情況看作者的介紹吧  
http://www.cnblogs.com/dawei/archive/2011/04/18/2019903.html#2824345
接下來也將會有一篇部落格專門介紹 關於更新主線程UI線程的所有辦法

3) StrictMode修改預設的策略

在我們的Activity類的onCreate方法中,設定如下規則:
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

這樣也可以解決這個問題

關於StrictMode的具體介紹,請看另一個部落格介紹的非常詳細:

http://hb.qq.com/a/20110914/000054.htm

Android主線程不能訪問網路異常解決辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.