android 打开网络设置 异常,Android主线程不能访问网络异常解决办法
從兩個方面說下這個問題:
不讓訪問網絡的原因
解決該問題的辦法
不讓訪問網絡的原因:
由于對于網絡狀況的不可預見性,很有可能在網絡訪問的時候造成阻塞,那么這樣一來我們的主線程UI線程 就會出現假死的現象,產生很不好的用戶體驗。所以,默認的情況下如果直接在主線程中訪問就報出了這個異常,名字是NetworkOnMainThreadException
解決該問題的辦法
獨立線程
異步線程AsyncTask
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
3) StrictMode修改默認的策略
在我們的Activity類的onCreate方法中,設置如下規則:
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
這樣也可以解決這個問題
關于StrictMode的具體介紹,請看另一個博客介紹的非常詳細:
總結
以上是生活随笔為你收集整理的android 打开网络设置 异常,Android主线程不能访问网络异常解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对接银联商务公众号+服务窗支付(
- 下一篇: 时钟 滑动 翻页 存在点循环