Blog / 阅读

关于android主线程异常NetworkOnMainThread不能访问网络

by admin on 2014-04-20 15:15:13 in ,



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

异常的原因:在android3.0版本开始就强制不能在主线程中访问网络,要把访问网络放在独立的线程中。在开发中,为了防止访问网络阻塞主线程,一般都要把访问网络放在独立线程中或者异步线程AsyncTask中。
也就是说解决NetworkOnMainThread异常有两种方案:
第一种:重新开一个线程。
第二种:忽略这些强制策略
而在我是在学习的过程中,没有那么限制需要考虑就采用了第二种解决方案,忽略这些强制策略问题,要忽略策略问题可以在onCreate()方法里面加上
[java] view plaincopy
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),也可以仅将警告计入日志,让你的应用继续执行,就像我的程序解决方案就是强制忽略策略,强制执行。



写评论

相关文章

上一篇:Word,Excel,pdf,txt等文件上传并提取内容

下一篇:quickcocos2dx framework环境变 fatal error C1083: 无法打开源文件:“.Box2D/Dynamics/b2World.h

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云