【问题标题】:Can iphone app woken in background for significant location change do network activity?iphone 应用程序可以在后台唤醒以进行重大位置更改进行网络活动吗?
【发布时间】:2011-07-20 16:11:36
【问题描述】:

我正在开发一个在后台监控重大位置变化的应用。我一直在阅读有关 ios4 和应用程序生命周期的所有答案(好吧,我想都是!),但我不知道当应用程序在后台唤醒时我是否可以进行任何网络访问由于位置发生重大变化。

该应用当前通过 TCP 套接字进行网络访问。应用程序暂停时,套接字将关闭。

由于接收到位置更改事件,我可以在后台重新连接套接字、接收一些数据、发送新位置然后关闭套接字吗?在办公室静止不动时很难测试!我们可以假设完成网络活动不到 10 秒。还假设该应用未注册为 voip 应用(可能/应该是?...)

有什么想法吗?

【问题讨论】:

    标签: iphone networking ios4 background location


    【解决方案1】:

    是的。您可以根据重大更改事件进行网络处理。

    当您因重大更改(从终止或暂停状态)被唤醒进入后台状态时,您可以发出 http 请求。如果您发现您的应用在完成 HTTP 请求之前被终止,您可以通过 UIApplication 上的 beginBackgroundTaskWithExpirationHandler: 方法请求额外的后台处理时间。

    我在短途火车旅行上花了很多时间来测试这一点。 :)

    【讨论】:

    • 感谢 RBT,这听起来很确定。
    • 从技术角度来看是可能的。但苹果允许吗?您的应用(使用这种技术)是否真的获得了批准?
    • @Toastor 是的。事实上,论坛上的一位 Apple 员工也向我提出了建议。
    【解决方案2】:

    我想详细确认一下 RedBlueThing 的回答。

    我现在使用以下方法来完成此操作。 bgTask 被声明为UIBackgroundTaskIdentifier

    bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:
               ^{
                     [[UIApplication sharedApplication] endBackgroundTask:bgTask];
                }];
    
    // Now call methods doing network activity
    // ...
    // WHEN I KNOW THE LAST ACTION HAS COMPLETED USE THIS BLOCK OF CODE
    
    if (bgTask != UIBackgroundTaskInvalid)
    {
          [[UIApplication sharedApplication] endBackgroundTask:bgTask];
          bgTask = UIBackgroundTaskInvalid;
    }
    

    希望这会有所帮助,因为我看到很多人都在看这个问题。

    【讨论】:

    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多