【问题标题】:iOS - Background Services when app is terminatediOS - 应用程序终止时的后台服务
【发布时间】:2019-09-08 11:01:18
【问题描述】:

如果应用程序终止,后台模式功能(如后台获取和位置更新)是否有效?还是只有应用进入后台才有效?

谢谢

【问题讨论】:

    标签: ios ios-background-mode


    【解决方案1】:

    是的,它(大部分时间)都有效,如果您正确设置了所有内容并拥有权限。您的应用需要至少启动 1 次,才能订阅更新。

    对于后台获取,在didFinishLaunching 方法中设置UIApplication.shared.setMinimumBackgroundFetchInterval(3600),实现performFetchWithCompletionHandler 方法,并在后台模式中启用后台获取。 注意尽快做,尽快调用completionHandler。

    阅读更多Updating Your App with Background App Refresh here

    对于通知更新,您还必须将CLLocationManager 对象的allowsBackgroundLocationUpdates 属性设置为true,并在后台模式中启用位置更新

    阅读更多Handling Location Events in the Background here

    【讨论】:

    • 是的,它可以工作(大部分时间), - 嗨,这是否意味着,该应用程序将出现在 App-Switcher 中。换句话说,即使他之前已经手动终止(从App-switcher中删除),如果他双击主页按钮,用户是否能够看到该应用程序?
    • 不,如果您终止应用,它不会出现在应用切换器中,但仍会收到后台更新。
    【解决方案2】:

    Background fetch 的作用类似于,它允许应用程序在后台下载内容。如果应用程序终止并获得一些下载内容的触发器,它实际上会通过在后台静默启动应用程序并下载内容来唤醒。请参阅下面的 Apple 说明。

    上述每种模式都让系统知道您的应用应该 在适当的时候被唤醒或启动以响应相关的 事件。例如,一个开始播放音乐然后移动的应用程序 到后台仍然需要执行时间来填充音频输出 缓冲区。启用音频模式告诉系统框架他们 应继续在以下位置对应用程序进行必要的回调 适当的间隔。如果应用程序没有选择此模式,任何音频 当应用程序移动到 背景。

    这里,前面的模式指的是Background fetch, Audio and AirPlay, Location updates and other Background modes of the app

    请参阅Apple document 了解后台执行。有关不同背景模式的更多信息,请参阅Declaring Your App’s Supported Background Tasks

    位置更新的工作方式不同。有多种 Apple 服务可用于获取位置。

    Significant Location service:它适用于所有模式。前景、背景,甚至处于终止模式。

    Standard Location service:只在FG和BG模式下有效。当应用程序处于终止模式时,它不起作用。

    关于BG位置的更多详细信息,请参考Handling Location Events in the Background文档。

    希望对你有帮助。

    【讨论】:

    • “苹果文档”的链接目标不再指向引用的文档。
    【解决方案3】:

    如果应用程序终止,后台获取和位置更新是否有效?还是只有在应用进入后台时才有效?

    这取决于您在项目中使用的location service 类型。请参阅下面对所有类型的位置服务的分析。

    Standard location service: 如果您实施了标准位置服务,那么它将仅适用于backgroundforeground 状态。

    Significant location updates:如果您实施了重要的位置更新,那么它将适用于backgroundforegroundterminate 状态也是如此。

    Region Monitoring: 如果您实施了重要的位置更新,那么它将适用于backgroundforegroundterminate 状态也是如此。

    Visits Location Service:如果您实施了访问定位服务,那么它将适用于backgroundforegroundterminate 状态也是如此。

    请参考以下参考资料。

    Apple official doc

    Raywenderlich article

    【讨论】:

    • 注释说明禁用“后台应用刷新”不会阻止位置事件的传递。不过,它并没有说明启动该应用程序的任何内容。这仍然悬而未决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多