Android开发中遇到了android.os.NetworkOnMainThreadException报错,由于刚开始接触并不熟悉所以走了写弯路,在此记录下问题。
官方解释是从SDK3.0开始,Google不再允许网络请求(HTTP、Socket)等相关操作直接在主线程中,会阻塞主线程,用户体验不好,因此此类操作应该是在子线程去开启,当然解决方法也有很多种,在这里只记录下个人认为比较好的方式:
- 开启子线程来完成网络操作
new Thread(networkTask).start();
Runnable networkTask = new Runnable() {
@Override
public void run() {
// 在这里进行 http request.网络请求相关操作
// 之后可以用handler或则EventBus来将数据传送到主线程
}
}