【发布时间】:2015-06-12 09:29:03
【问题描述】:
在我们正在制作的应用程序中,我们希望在应用程序挂起时尝试远程用户保存数据。在 Unity 的编辑器和 Android 上,这很简单
WWW www = new WWW(_URL);
while(!www.isDone)
{
Thread.Sleep(100);
}
Debug.Log(www.text);
(完整样本:https://github.com/SixMinute/iOSWWWGet)
但在 iOS 上,www.isDone 在我们阻塞时永远不会计算为真,所以整个事情就挂了。
这是一个错误,还是设计使然?然后,如果它是设计使然,那么正确的做法是什么,因为如果我们把它放在StartCoroutine 后面,它就不会正确地放在主线程上,并且在挂起时,发生的事情会被推送到应用程序恢复时(这完全违背了我们试图做的事情的目的)。
编辑:在与 IRC 上的一些 Unity 开发人员交谈后,他们接受这实际上是代码中的一个错误,理解我需要这个的原因,并接受需要一种同步触发 WWW 请求的方法,或在 iOS 上的 OnApplicationPause(true) 流期间调用时启用此功能的其他方式,因为否则(尽管能够轻松地在本机上执行此操作)当时无法触发 WWW 请求,唯一的选择是将它们排队直到恢复,这是完全不切实际的。
【问题讨论】:
标签: ios multithreading unity3d