zoukankan      html  css  js  c++  java
  • 关于android主线程异常NetworkOnMainThread不能訪问网络

    今天在学习的过程中遇到了NetworkOnMainThread的异常,关于这个异常问题在android sdk 4.0版本号上,这个问题可能比較常见,查了许些资料大多都是大概解说原因,可是没有解说到详细的解决方法。以下将我写的程序的时候的解决方法记录例如以下:

    首先看看LogCat的异常信息:


    异常的原因:在android3.0版本号開始就强制不能在主线程中訪问网络。要把訪问网络放在独立的线程中。在开发中。为了防止訪问网络堵塞主线程。一般都要把訪问网络放在独立线程中或者异步线程AsyncTask中

    也就是说解决NetworkOnMainThread异常有两种方案:

    第一种:又一次开一个线程。

    另外一种:忽略这些强制策略

    而在我是在学习的过程中,没有那么限制须要考虑就採用了另外一种解决方式,忽略这些强制策略问题。要忽略策略问题可以在onCreate()方法里面加上

    StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    同事在类的上面加上@SuppressLint("NewApi"),这样问题就攻克了,程序也能够顺利通过运行。

    在上面解决方式中提到了StrictMode类,这个类是在android sdk 2.3以上才有StrictMode类。讲到这里那么我来简要说明下StrictMode类:

    StrictMode类是在Android 2.3提供一个称为严苛模式(StrictMode)的调试特性。那它都做什么呢?它将报告与线程及虚拟机相关的策略违例。一旦检測到策略违例(policy violation),你将获得警告。其包括了一个栈trace显示你的应用在何处发生违例。能够强制用警告取代崩溃(crash),也能够仅将警告计入日志,让你的应用继续运行,就像我的程序解决方式就是强制忽略策略,强制运行。


  • 相关阅读:
    tomcat配置通过域名直接访问项目首页步骤
    kafka配置参数
    nginx平滑升级
    redsi一主两从三哨兵
    kill
    lelnet爱一直在
    在linux中查看进程占用的端口号
    监控redis
    老猿学5G随笔:RAN、RAT以及anchor移动性锚点的概念
    老猿学5G随笔:5G网元功能体NF以及NF之间的两种接口--服务化接口和参考点
  • 原文地址:https://www.cnblogs.com/llguanli/p/8340526.html
Copyright © 2011-2022 走看看