【问题标题】:IOS CoreBluetooth : App Running in Background When BLE is DisconnectedIOS CoreBluetooth:当 BLE 断开连接时,应用程序在后台运行
【发布时间】:2015-05-02 23:59:57
【问题描述】:

我试图在BLE断开时在后台运行我的应用程序。但是系统会在一段时间后杀死该应用程序。所以我阅读了苹果的文档--《核心蓝牙编程指南》。最后我发现了以下内容“iOS 应用的核心蓝牙后台处理”中的段落。

“在后台执行长期操作

某些应用可能需要 使用 Core Bluetooth 框架在 背景。例如,假设您正在开发家庭安全 用于与门锁通信的 iOS 设备应用程序(配备蓝牙低功耗技术)。应用程序和锁相互作用,在用户离开家时自动锁门,在用户返回时自动解锁门——这一切都是在应用程序处于后台时进行的。当用户离开家时,iOS 设备最终可能会超出锁的范围,从而导致与锁的连接丢失。此时,应用程序可以简单地调用CBCentralManager类的connectPeripheral:options:方法,由于连接请求不会超时,所以当用户回到家时,iOS设备会重新连接。现在假设用户离开家几天。如果用户外出时应用程序被系统终止,用户回家后应用程序将无法重新连接锁,用户可能无法解锁门。对于此类应用,能够继续使用 Core Bluetooth 执行长期操作(例如监控活动和未决连接)至关重要。”

从这篇文章我们知道“监控活动和挂起的连接can solve the problem但我找不到任何方法来实现monitoring active and pending connections

核心蓝牙框架参考

当 BLE 断开连接时,如何实现让我的应用在后台运行?

有人知道吗?

【问题讨论】:

    标签: ios bluetooth core-bluetooth


    【解决方案1】:

    如果您使用bluetooth-central Background Execution Mode 注册您的应用程序,如果您的应用程序没有运行,它将被启动,并会获取调用它的委托方法来处理发现和连接,例如centralManager:didDiscoverPeripheral,您可以从中调用@987654323 @。

    确实,系统可能会在后台杀死您的应用,但它会针对这些事件重新启动它。

    系统不会重新启动您的应用以执行后台 BLE 的唯一情况是用户在上次启动时强行终止了该应用。系统会记住这一点,并且在用户第一次手动重新启动应用程序之前不会再次重新启动应用程序。

    【讨论】:

    • 只有在用户没有手动关闭应用的情况下(通过双击主页按钮并将其滑出),系统才会重新启动应用。在这种情况下,系统不会重新启动您的应用程序,让它有机会重新连接(因为系统假定用户不希望此应用程序在这种情况下运行)。
    • “系统确实可能会在后台杀死你的应用程序,但它会为这些事件重新启动它。”这实际上是错误的。我已经测试过这个案例。您能否提供此声明的来源?
    • @BangOperator,你测试了哪一部分并且是假的?系统可能会在后台杀死它?根据苹果的说法:“在被唤醒后,应用程序有大约 10 秒的时间来完成一项任务。理想情况下,它应该尽快完成任务并允许自己再次暂停。在后台执行花费过多时间的应用程序可以被系统限制或杀死。”和“...当调用任何 CBCentralManagerDelegate 或 CBPeripheralDelegate 委托方法时,系统会唤醒您的应用,从而允许您的应用处理重要的中心角色事件...”
    • @Despotovic 是您在 Apple 文档中记录的 cmets。
    • @RohitKP 在State Preservation and Restoration 下,它声明“当系统即将终止您的应用程序以释放内存时......”。所以我找不到关于这个说法的直接记录的 qoute。这是我目前在文档中能找到的最好的。但我可以告诉你,我的测试证实了这一事实......
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多