文章类型: ANDROID
关键词: Android,主线程,不能,访问,网络,异常,解决,办法
内容摘要: Android主线程不能访问网络异常解决办法

Android主线程不能访问网络异常解决办法

2019/10/22 15:55:48    来源:apple    阅读:

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

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

↑ 上一篇文章:vc遇到问题集锦VS中这个warning怎么解决 关键词:VS,vc,遇到,问题,集锦,warning,MSB8004 发布日期:2019/5/9 9:42:42
↓ 下一篇文章:android 判断字符串是否为空的最优方法 关键词:android,判断,字符串,是否,为空,最优,方法 发布日期:2019/10/23 16:04:33
相关文章:
Error:(2, 0) Plugin with id 'com.github.dcendents.android-maven' not found解决办法 关键词:Plugin,with,id,,com,github.dcendents.android-mav.. 发布日期:2019-10-31 14:54
sqlserver 附加数据库失败,操作系统错误 5:"5(拒绝访问。)"的解决办法 关键词:sql,server,附加数据库失败,操作系统错误,5,拒绝访问,解决办法 发布日期:2017-09-28 19:59
win7查看基本网络信息并设置连接显示未知,网络连接状态图标显示红叉叉的解决办法 关键词:win7,查看,基本网络信息,设置,连接,显示,未知,网络连接,状态图标,显示,红叉叉,解决办法 发布日期:2019-03-11 16:31
相关目录:ANDROIDJAVA
我要评论
正在加载评论信息......