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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM