在通过Unity3D创建iOS 64支持构建期间,我遇到了一个奇怪的情况, yield return www call阻止了设备上的主线程。
我尝试了Unity版本4.6.5,4.6.6和5.1.0,并遇到了与WWW类相同的问题。 我也尝试过xCode版本6.3.0,6.3.1,6.3.2。
以下是我正在使用的代码段
private IEnumerator StartDownload(string url, string path)
{
WWW www = new WWW(url);
yield return www; //blocking main thread
if (string.IsNullOrEmpty(www.error))
{
Debug.Log("File Download Complete");
}
else
{
Debug.Log("Error in downloading file, Error: " + www.error);
}
}
答案 0 :(得分:0)
唯一方式我可以设想它阻止主线程,如果你没有正确地称它为Coroutine ......
正确的电话:
void Start()
{
StartCoroutine(StartDownload("http://google.com", ""));
}
然后调用deferred(在主线程中),但不会阻塞线程。它将被轮询,直到完成。
错误的方式(将阻止主线程):
void Start()
{
IEnumerator a = StartDownload ("http://google.com", "");
while (a.MoveNext()) {}
}
答案 1 :(得分:0)
我从来没有看到yield return www;
阻止整个下载,但我确实遇到了这个:
这种情况正在发生,因为即使下载发生在另一个线程上,当Unity将数据从下载缓冲区复制到最终位置时,复制也会完成UI线程,如果磁盘操作超过2 MB / s,那么线程被阻止。
该错误发生在iOS的Unity WWW
实现中。
如果是这种情况,我可以为您提供修复此问题的更改。