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點擊之后出現上面兩行錯誤,虛擬機中顯示加載失敗,上網搜索好像是說虛擬機中禁止了在主線程中進行網絡請求,不是很明白其中的解釋,希望得到幫助。
4 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
網絡請求是一個耗時操作,舉個例子,你用網易新聞app加載新聞,網絡不好的時候會加載很久,假如這個網絡請求操作在Activity中執行,那么會一直等待返回結果,導致這個Activity卡在此處,無法響應其他的操作,也就是常說的主線程被阻塞導致ANR,所以需要重新開一個線程去進行網絡訪問,如下:
protected void onCreate(Bundle savedInstanceState){
...
new Thread(new Runnable() {
@Override
public void run() {
//此處應為你網絡請求的代碼,通過Hanlder傳遞給主線程Activity處理
}
}).start();
}

holdtom
TA貢獻1805條經驗 獲得超10個贊
Android現在是不能在主線程中進行網絡操作的,網絡操作都需要放到子線程中去執行,還有一些別的耗時操作也都需要放到子線程中去執行,如果你把那些耗時操作都放到主線程中去執行的話,那么當主線程執行到這些耗時操作這里時就會阻塞在這里,對用戶體驗不好,而且時間長了會報ANR異常。

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
每種語言都有缺點和有點,比如java沒有閉包,吹牛逼的一切皆對象,代理機智薄弱,寫出來的代碼冗長且效率低下,代碼量動不動就上幾十萬,各種框架無數繁瑣的配置等等都讓人煩不勝煩
添加回答
舉報
0/150
提交
取消