【问题标题】:Downloading heavy data from server using separate thread使用单独的线程从服务器下载大量数据
【发布时间】:2013-01-18 12:27:48
【问题描述】:

我们正在构建一个 iPhone 应用,但在后台下载应用内购买时遇到问题,我想知道是否有人有解决方案……

我们的应用内购买相当大 35-40mb,每次购买由 5 件商品组成,每件 7-8mb,因此手机通常会进入待机状态,或者用户在下载购买之前切换应用程序,因此应用内购买是必不可少的购买在后台无缝下载。

当我们下载购买时,我们必须从服务器下载大约 35-40mb,并同时更新应用程序中的本地 sqlite 数据库。我们已经测试在前台下载项目并且它工作正常,我们已经做了一些处理以保持下载过程在后台继续并且下载继续并且我们可以在调试器中看到它工作。

但是我们有以下问题……

用户开始下载 应用上的下载页面显示应用正在下载 用户离开应用程序或手机进入待机状态 用户返回应用

此时,应用启动画面会加载并停留在屏幕上,直到完成其中一个 8mb 下载,完成后,它会切换到应用上的下载页面。这真的让用户感到困惑,因为他们认为应用程序已经崩溃了。

那么我们如何管理应用内购买,以便当用户按下下载时,它会在后台开始下载,并且在下载过程中应用正常运行?所以用户离开应用程序,当他们返回时,它会显示正确的页面和下载进度。用户在应用内导航,它工作正常。

一些观察...

我必须连续运行 NSURLConnection 5 次才能执行下载,因为每次应用内购买有 5 个项目。

我注意到的是,当第一次下载正在进行时,即使用户按下主页按钮,“didEnterBackground”方法也不会被调用,但在第一次下载过程完成后,“didEnterBackground”方法会被调用.如果用户将应用程序置于后台,然后返回到前台,则应该调用“didEnterForeground”,但不是。

我正在使用与“MainThread”不同的线程下载数据,但仍在同一问题中运行。

任何帮助将不胜感激。

【问题讨论】:

    标签: iphone


    【解决方案1】:
    • 看看AFNetworking 它被许多人使用并加载到不同的线程上。在readme 中有一个带有进度的文件下载示例。
    • 您可以防止 iOS 在下载过程中进入待机模式:

      [UIApplication sharedApplication].idleTimerDisabled = YES;
      

    【讨论】:

    • 感谢您的建议,但问题是:如果用户按下主页按钮(即在后台强制发送应用程序),那么肯定会导致一些数据丢失
    【解决方案2】:

    试着看看……一个新的 AFNetworking'extension AFDownloadRequestOperation

    这个类有额外的支持来恢复部分下载,使用一个临时目录,并有一个特殊的块来帮助计算正确的下载进度等

    “不要忘记将 shouldResume 设置为 YES”:)

    对于 AFDownloadRequestOperation,您还可以查看 AFNetworking not resuming download

    UPD

    在最坏的情况下..你可以在后台尝试"Task Completion for Long-Running Tasks""Task-Specific Background Processing"..http://www.codeproject.com/Articles/124159/Hour-21-Building-Background-Aware-Applications

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多