unity的www.dispose()卡死freeze bug
起因
最近做gearvr开发时,发现了个画面卡死的问题,表现是画面播着播着突然渲染停止,看起来是主渲染线程被无限制卡死,当时只知道具体现象是可能与http请求有关,一直也没有定位到,而在editor模式下不会出现类似的问题,所以大概可以确定是在android平台上发生的。我的unity版本是5.3.4f1
调查
最近仔细调试了一下,发现与www的dispose()有关,当然我代码是用的
using(WWW www = new WWW(url))
代码块这样的方式自动调用dispose,我试着直接调用www.dispose()
也会有卡死的问题。确定了是dispose()的问题,就在网上看了一些其他人遇到类似的问题。这里我的http请求是服务器一直没有回应,无休止的pending,好吧~
http://answers.unity3d.com/questions/1067499/bug-wwwdispose-when-called-before-wwwisdone-true-f.html
大体上说法就是当调用www.dispose()
时,如果之前的请求还没结束,那么可能就会发生阻塞卡死,因为是在协程中调用,如果发生阻塞一样会导致主渲染线程阻塞,大概卡死1分多钟吧。
解决方案
要么就不要去调用dispose了,要么换个实现方式吧,比如besthttp插件,哈哈我觉得至少比www使用起来舒服很多。
坑总是很多的,还是要想办法定位和解决。