【问题标题】:iphone app crashing when url connection connection timed out is coming当 url 连接连接超时时,iphone 应用程序崩溃
【发布时间】:2010-05-24 08:31:56
【问题描述】:

我正在创建 iphone 应用程序。 这样,当应用程序启动时,它会连接到服务器并下载少量图像,然后继续执行应用程序。下载应用程序时,它将显示初始启动屏幕。只要我的服务器能够 ping 我的 iphone,它就可以正常工作。 但是当我的服务器花费大量时间来响应 NSURL 请求时,麻烦就开始了。 该应用程序因以下错误而崩溃:

Mon May 14 13:56:34 unknown Springboard[24] <Warning>: com.xxxx.xxx failed to launch in time

我了解到,当应用程序发生此类问题时,iphone 会使应用程序崩溃。我想知道 iphone 允许应用程序响应此类实例的最长时间。

有没有最大值?

【问题讨论】:

    标签: iphone timeout connection crash


    【解决方案1】:

    计时器大约是 20-30 秒,但这并不重要。

    您正在同步下载数据。请使用 NSURLConnection 将您的程序更改为异步下载。您的应用程序看起来会快得多,并且不会冒终止的风险。您还可以实现超时错误处理。

    【讨论】:

      【解决方案2】:

      来自 Apple's Reachability example 上的 Readme.txt:

      可达性示例演示 的异步使用 SCNetworkReachability API。您可以使用 API 同步,但不 通过 hostName 发出同步检查 在主线程上。如果设备 无法访问 DNS 服务器或位于 网络慢,同步调用 SCNetworkReachabilityGetFlags 功能最多可以阻止 30 秒试图解决 主机名。如果这发生在主 线程,应用程序看门狗将 20秒后杀死应用程序 不活动。

      正如 Paul 所说,进行任何类型的同步网络都是一个非常非常糟糕的主意。您需要在 iPhone 上异步加载。

      【讨论】:

        【解决方案3】:

        如果您的请求和响应操作在主线程中处理,UI 和主线程将被阻塞,并且可能需要一些时间才能收到响应。如果主线程阻塞了特定时间,WATCH DOG 将退出您的应用程序。

        更好的解决方案是在后台线程或其他线程中运行您的请求。

        例如

           if(!backgroundQueue)
            backgroundQueue=[[NSOperationQueue alloc]init];
        
        NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url]
                                                   cachePolicy:NSURLCacheStorageNotAllowed
                                               timeoutInterval:60];
        
        [NSURLConnection sendAsynchronousRequest:request
                                           queue:backgroundQueue
                               completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
            if (complete) {
                   // handle your logic here
            }
        }];
        

        此操作在后台线程中处理

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-06
          • 2016-06-09
          相关资源
          最近更新 更多