【问题标题】:Running a app forever in the background in iOS 8在 iOS 8 中永远在后台运行应用程序
【发布时间】:2014-10-02 01:06:15
【问题描述】:

关于这个主题有几个线程,没有什么对我有用。我不必在应用商店中部署应用程序,因此我可以在应用程序中进行修改以保持其运行。有什么方法可以让应用程序在后台运行时继续运行?任何指针表示赞赏。

【问题讨论】:

  • 你到底想达到什么目的。您可以使用各种后台模式,但本质上您不能让应用程序永远运行 - 例如,它可能会因内存压力而终止,但您可以使用一些后台模式让 iOS 重新启动您的应用程序背景
  • 设备需要每 30 秒连续获取数据,并根据从服务器返回的内容对其进行操作。我知道推送是这里的正确机制,但我们现在不能这样做,所以我们必须轮询。因为如果应用程序是后台的,我们不能每 30 秒运行一次,所以我试图找到其他方法。
  • 有什么想法或建议吗?
  • 您可以查看 VoIP 后台模式,因为您不打算将应用放入 App Store,但实际上没有任何方法可以保证持续后台执行。
  • 我试过了,但是对于 VoIP 后台模式,它需要来自外部的 ping,对吗?我不认为您可以使用计时器在后台永远连续触发。

标签: ios background


【解决方案1】:

我发现这个 github 项目解决了这个问题:https://github.com/voyage11/Location 显然 Apple 不会批准这种 hack,但我想它会适用于你的情况。

基本上你要做的是:

  • 在 info.plist 中使用位置背景模式功能
  • 始终让后台任务运行,但不要让它运行超过一分钟。每分钟创建一个新的后台任务并停止旧任务。
  • 除了之前的任务滚动,还保持一个长时间运行的后台任务。我不确定这是否真的需要。
  • 每分钟启动一次位置管理器并请求AlwaysAuthorization。

引用代码中一些重要的sn-ps:

后台任务:

bgTaskId = [application beginBackgroundTaskWithExpirationHandler:^{
    [self.service debugLog:[NSString stringWithFormat:@"BG....background task %lu expired", (unsigned long)bgTaskId]];
}];

并启动位置管理器:

if(IS_OS_8_OR_LATER) {
    [_locationManager requestAlwaysAuthorization];
}
[_locationManager startUpdatingLocation];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多