ANR属于安卓程序员老生常谈的话题了,入这行就一直听说不能在主线程进行耗时操作,因为安卓是单线程模型,程序启动的时候会创建一个“main”线程,也就是主线程,主线程要定时刷新界面,如果主线程中执行耗时操作,界面刷新不及时,就会造成卡顿,非常不好的用户体验。基于这些基本原则,平时在编程中也会去避免这类操作,但在今天开发调试中有幸遇到了ANR。
多的不唠,出现的场景是:点击按钮后重连socket,在重连之前会断开之前的连接。
最后通过打印时间确认是socket.close()
这行代码的问题,这样关闭socket,在这之前要先完成socket本次的读写才会进行关闭,所以在调用close之前要先执mSocket?.shutdownOutput() mSocket?.shutdownInput()
,这样问题就解决了。
网友评论