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的具体介绍,请看另外一个博客介绍的很是详细: