照着第一行代码第二版敲的前两部分代码,提示报错

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
点击之后出现上面两行错误,虚拟机中显示加载失败,上网搜索好像是说虚拟机中禁止了在主线程中进行网络请求,不是很明白其中的解释,希望得到帮助。

阅读 7.5k
4 个回答

既然这样,你把网络请求的代码放子线程试试呗

网络请求是一个耗时操作,举个例子,你用网易新闻app加载新闻,网络不好的时候会加载很久,假如这个网络请求操作在Activity中执行,那么会一直等待返回结果,导致这个Activity卡在此处,无法响应其他的操作,也就是常说的主线程被阻塞导致ANR,所以需要重新开一个线程去进行网络访问,如下:

protected void onCreate(Bundle savedInstanceState){
...

 new Thread(new Runnable() {
            @Override
            public void run() {          
             //此处应为你网络请求的代码,通过Hanlder传递给主线程Activity处理
            }
        }).start();
}

Android现在是不能在主线程中进行网络操作的,网络操作都需要放到子线程中去执行,还有一些别的耗时操作也都需要放到子线程中去执行,如果你把那些耗时操作都放到主线程中去执行的话,那么当主线程执行到这些耗时操作这里时就会阻塞在这里,对用户体验不好,而且时间长了会报ANR异常。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题