E/EGL_emulation: tid 14967: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x93d4c080, error=EGL_BAD_MATCH
点击之后出现上面两行错误,虚拟机中显示加载失败,上网搜索好像是说虚拟机中禁止了在主线程中进行网络请求,不是很明白其中的解释,希望得到帮助。
E/EGL_emulation: tid 14967: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x93d4c080, error=EGL_BAD_MATCH
点击之后出现上面两行错误,虚拟机中显示加载失败,上网搜索好像是说虚拟机中禁止了在主线程中进行网络请求,不是很明白其中的解释,希望得到帮助。
网络请求是一个耗时操作,举个例子,你用网易新闻app加载新闻,网络不好的时候会加载很久,假如这个网络请求操作在Activity中执行,那么会一直等待返回结果,导致这个Activity卡在此处,无法响应其他的操作,也就是常说的主线程被阻塞导致ANR,所以需要重新开一个线程去进行网络访问,如下:
protected void onCreate(Bundle savedInstanceState){
...
new Thread(new Runnable() {
@Override
public void run() {
//此处应为你网络请求的代码,通过Hanlder传递给主线程Activity处理
}
}).start();
}
Android现在是不能在主线程中进行网络操作的,网络操作都需要放到子线程中去执行,还有一些别的耗时操作也都需要放到子线程中去执行,如果你把那些耗时操作都放到主线程中去执行的话,那么当主线程执行到这些耗时操作这里时就会阻塞在这里,对用户体验不好,而且时间长了会报ANR异常。
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
既然这样,你把网络请求的代码放子线程试试呗