android+4.0访问网络,Android4.0 主线程不能访问网络异常解决办法

从两个方面说下这个问题:

1. 不让访问网络的缘由html

2. 解决该问题的办法java

不让访问网络的缘由:

因为对于网络情况的不可预见性,颇有可能在网络访问的时候形成阻塞,那么这样一来咱们的主线程UI线程 就会出现假死的现象,产生很很差的用户体验。因此,默认的状况下若是直接在主线程中访问就报出了这个异常,名字是NetworkOnMainThreadException网络

解决该问题的办法

1. 独立线程异步

2. 异步线程AsyncTaskide

3. StrictMode修改默认的策略ui

1) 独立线程的办法

启动一个新线程的代码:

new Thread(){线程

@Overridehtm

public void run() {对象

Dosomething();blog

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);

或者:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值