【发布时间】:2012-12-21 10:17:15
【问题描述】:
在开发使用蓝牙低功耗的应用时,iOS 设备有时会失去与外围设备的连接。 (有时几个小时。)
为了重新连接到现有外围设备,应用必须在一天中以特定速率在后台不断扫描,即使应用处于后台也是如此。
问题是,由于内存限制等原因,iOS 无法保证您的应用不会被杀死。
Information found in the iPhone OS Programming guide 声明:
使用蓝牙外围设备的应用可以在以下情况下要求唤醒 当应用程序暂停时,外围设备会提供更新。这 支持对于以 定期间隔,例如蓝牙心率带。当一个应用程序 包括带有 bluetooth-central 值的 UIBackgroundModes 键 它的 Info.plist 文件,核心蓝牙框架保持打开任何 相应外围设备的活动会话。此外,新 来自外围设备的数据导致系统唤醒应用程序 以便它可以处理数据。系统还会唤醒应用程序以 处理附件连接和断开通知。
当手机连接到设备并且应用程序处于后台时,不会出现此问题。但是,当设备断开连接并且应用程序处于后台时,它确实会发生。在这种特定情况下,手机不再连接到外围设备,因此不再收到通知。
很多人之前在 Stack Overflow 或 Apple 论坛上都讨论过这个问题,我相信其中一位 Apple 开发人员已经回复说:
我们已注意到此问题,并正在尝试提出解决方案。 目前,没有解决方法。”
我的问题是,有没有办法至少提高你不会因为内存限制而被 iOS 杀死的机会?
例如,即时通讯应用 (IMO) 似乎在后台运行得非常好。在数日未使用后,该应用将唤醒并显示一条 gChat 消息。
我在质疑诸如
之类的事情- 强指针
- 总内存大小
- 在应用程序处于后台或最小化时减少内存大小
- 降低后台操作频率
- 等
【问题讨论】:
标签: objective-c ios background-process core-bluetooth bluetooth-lowenergy