socket(http或者其他网络请求)在主线程中使用会报错:NetworkOnMainThreadException
来源:互联网 发布:苏州银行业数据统计 编辑:程序博客网 时间:2024/06/06 20:57
在mainActivity中使用socket连接,抛出以下异常
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
at libcore.io.IoBridge.connect(IoBridge.java:112)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.Socket.startupSocket(Socket.java:567)
at java.net.Socket.tryAllAddresses(Socket.java:128)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at panda.com.networkdemo.MainActivity$2.onClick(MainActivity.java:59)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
查看官方API文档:以下解释
Class Overview
The exception that is thrown when an application attempts to perform a networking operation on its main thread.
This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. See the document Designing for Responsiveness.
Also see StrictMode
.
意思大概就是说一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。主线程不建议有耗时的操作,例如http请求、较复杂的算法等,否则很容易会出现ARN
解决方法:在activity当中启用多线程进行处理。子线程处理完毕之后再通知主线程进行UI更新
0 0
- socket(http或者其他网络请求)在主线程中使用会报错:NetworkOnMainThreadException
- 在主线程中访问网络出现NetworkOnMainThreadException
- NetworkOnMainThreadException 安卓主线程启动Socket网络链接
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- HTTP请求出错(no resource): Android4.0不能在主线程中进行HTTP请求
- 【NetworkOnMainThreadException】关于主线程不能访问网络异常NetworkOnMainThreadException
- Caused by: android.os.NetworkOnMainThreadException错误解决办法(强制主线程做网络请求)
- 血的教训,一定不要再4.0以后在主线程里面访问网络NetworkOnMainThreadException
- socket用在主线程中
- android studio 主线程中访问网络,遇到android.os.NetworkOnMainThreadException
- android studio 主线程中访问网络,遇到android.os.NetworkOnMainThreadException
- Android4.0不能在主线程中进行HTTP请求解决办法 1
- Http之客户端请求服务器,服务器响应客户端。通过Handler在主线程中读取数据
- 新线程网络请求,回调方法在主线程中进行
- TIJ 复习笔记3
- Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言)
- Aspose.cell
- android:inputType常用取值
- 171 git subtree 管理子项目
- socket(http或者其他网络请求)在主线程中使用会报错:NetworkOnMainThreadException
- 去除文本中的括号内容
- java开发者工具下载地址集
- Android图片的裁剪
- HighCharts文档
- Git时间
- ArrayList源码解析
- 静不下心学习,怎么办?
- Android-在应用中使用拖拽教程