2016년 4월 1일 금요일

Unity3d www.dispose() 프리징 현상 이슈

 에셋번들을 다운로드 중에 강제로 네트워크 연결을 끊을 경우 프리징 현상이 일어나는 단말기(갤럭시 노트4)가 있어 관련 사항을 정리함.

 coroutine 내에서 StartCoroutine() 함수로 다시 coroutine 을 호출하는 구조로 에셋번들을 진행함.

 상위 coroutine에서 다운로드 메니징을 진행하며 다운로드 시작시 다운로드 coroutine을 진행함

하위 coroutine 에서 다운로드를 진행중에 네트워크를 강제로 끊으면 프리징 발생

디버깅 결과

using (WWW www = new WWW(iOSUrl)
{
}

WWW.dispose() 함수가 호출되는 시점에서 프리징현상 발생

using 중괄호가 끝나면 자동으로 WWW.dispose()가 호출되는데

이때도 프리징 발생

코드를 여러 방면으로 수정 해보았으나 해결이 되지 않는 상황

네트워크 연결이 종료된 뒤로 다운로드 중에 WWW.dispose() 를 호출 하면서 문제가 없도록 하는 방법을 찾아야함

관련 링크

https://issuetracker.unity3d.com/issues/unity-freezes-when-www-dot-dispose-is-used-while-downloading-assetbundle

https://issuetracker.unity3d.com/issues/android-application-freezes-on-www-dot-dispose-if-connection-is-canceled

http://forum.unity3d.com/threads/www-dispose-freezes-unity-4-5.252167/


http://stackoverflow.com/questions/18353821/dispose-www-if-timeout-occurs-in-unity3d