1. 不讓訪問網絡的緣由html
2. 解決該問題的辦法java
因爲對於網絡情況的不可預見性,頗有可能在網絡訪問的時候形成阻塞,那麼這樣一來咱們的主線程UI線程 就會出現假死的現象,產生很很差的用戶體驗。因此,默認的狀況下若是直接在主線程中訪問就報出了這個異常,名字是NetworkOnMainThreadException網絡
1. 獨立線程異步
2. 異步線程AsyncTaskide
3. StrictMode修改默認的策略ui
啓動一個新線程的代碼:
new Thread(){線程@Overridehtm
public void run() {對象
Dosomething();blog
handler.sendEmptyMessage(0);
}
}.start();
此處咱們重寫了線程類的run方法,執行Dosomething. 在裏面還有個handler對象,這又涉及到了跨線程修改UI元素內容的問題。在java中是不容許跨線程修改UI元素的,如咱們在新啓動的線程中想去修改UI主線程中TextView的文本時,會報錯誤的。若是想作這樣的操做,咱們就得藉助Handler這個類來實現。 關於這個handler類的用法,咱們單獨的再來寫一篇博客進行介紹。
這裏關於AsyncTask 介紹的文章不錯, 詳細狀況看做者的介紹吧
http://www.cnblogs.com/dawei/archive/2011/04/18/2019903.html#2824345
接下來也將會有一篇博客專門介紹 關於更新主線程UI線程的全部辦法
在咱們的Activity類的onCreate方法中,設置以下規則:
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
或者:
if (Build.VERSION.SDK_INT >= 11) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads ().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
}
這樣也能夠解決這個問題
關於StrictMode的具體介紹,請看另外一個博客介紹的很是詳細: