关于NetworkOnMainThreadException和StrictMode

昨天写代码的时候碰上了NetworkOnMainThreadException,这个是我之前一直没有碰到过的,所以细查了下,做个汇总。

      StrictMode是android2.3之后加的一个新API。那么它是来干什么的呢?简言之,就是使你的代码更流畅、更规范的。

      如果你的代码报出了NetworkOnMainThreadException,那么你需要在onCreate插入以下代码:

     

    public void onCreate() {

       if (DEVELOPER_MODE) {

            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

                 .detectDiskReads()

                 .detectDiskWrites()

                 .detectNetwork()

                 .penaltyLog()

                 .build());

        }

        super.onCreate();

    }

      或者直接定义为默认的:

    public void onCreate() {

     if (DEVELOPER_MODE) {

         StrictMode.enableDefaults();

     }

     super.onCreate();

    }

    这样你就启用了一个在UI线程进行各项操作的一个检查,比如:android2.3 后你不能在主thread上进行网络的请求操作。事实上,即将发布的4.0版本,我们把在主 thread

请求网络,视为一个严重的错误,因为网络访问是不流畅的,会拖累你的程序。所以启用这个模式后,对于不规范的地方它会在Log中给你提示。

    以上这些代码只是在开发阶段需要加上的,所以条件是 DEVELOPER_MODE ,发布时注释掉即可。另外,使用时只要在入口 Activity 中加入以上这段代码,整个项目都有用,不需要在每个 Activity 中都加。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值