在我们正在制作的应用程序中,当应用程序暂停时,我们希望尝试远程保存用户数据。在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
从未评估为true,因此整个过程就会挂起。
这是一个bug还是设计问题?如果是设计问题,那么正确的方法是什么呢?因为如果我们将其放在StartCoroutine
后面,它不会正确地运行在主线程上,在暂停时,正在发生的事情会被推迟到应用程序恢复时(这完全背离了我们的初衷)。
编辑:在与一些Unity开发人员在IRC上交谈后,他们承认这实际上是代码中的一个bug,理解我需要这样做的原因,并接受需要有一种方式来同步触发WWW请求,或者在iOS的OnApplicationPause(true)
流程中调用其他方法,否则(尽管可以轻松地在本地执行),在那个时间点上没有触发WWW请求的方法,唯一的选择是将它们排队直到恢复,这完全不切实际。
OnApplicationPause(true)
调用中触发WWW请求。目前最简单的形式是您的响应是正确的,我会标记它,但希望Unity修复错误/允许在iOS上执行此操作的方法,然后我将将其作为答案添加。 - seaders