[4.6.7] Occasionally freeze on Android when using coroutine + www and UnityMain thread in "wait" state

Our game occasionally freeze on Android devices, when calling a WWW with coroutines. Yes, the issue happens when we try to call a WWW (but not every time)
The problem was never found on iOS devices.
When the issue happens, the whole screen will freeze for quite a few minutes while the music continues to play。And eventually, it will recover!! Yes, it recovers!! After the several minutes freezing, the game will continue to run like nothing happened.

We tried to attach ADT to our process, and found that when the issue happens, the thread UnityMain is always in “wait” state, with a stack trace as below:

at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:364)
at java.lang.Thread.join(Thread.java:748)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.a(Unknown Source)
at com.unity3d.player.UnityPlayer$b.run(Unknown Source)

We have been stuck at this issue for weeks…what could be the possible causes?

Looks like the WWW works in synchronous manner on Android devices which makes application thread wait until network request is completed. Try to attach network sniffer and see what is going on the network during the lag. There are different ways to solve it. You can create your own thread for making network requests. But this drives you into synchronization issues. You can also use *Async networking methods from the .NET Framework or go along with those guys, who written their own async request maker and published it in unity wiki here http://wiki.unity3d.com/index.php/WebAsync using IAsyncResult and the ThreadPool.