以Apple的EADemo为基础,我试图了解背景对EAAccessories的影响。
当我收到connectNotification时,我会收到附件,检查协议并获取流。使用流我设置委托,在RunLoop上安排,然后打开
目前,当我进入背景时,我将这一切都撕下来了。我退出了我所做的一切并释放了所有物品。
我也在didDisconnect上做了这个拆解。
进入后,我并不总是得到一个didConnect,所以我走了connectedAccessory列表并检查了适当的设备。
- = - = - = -
EA演示设置并删除视图上的会话,因此我们不会看到是否存在背景持久性。
EA演示代码似乎建议您只要设备本身没有断开连接就可以拆除并重新启动。
然而,当iOS设备已经睡眠或将应用程序置于后台并且设备将停止确认数据时,会话和设备有时似乎进入状态,或者更糟糕的是将停止将数据从流中拉出到溪流填满了。
问题:使用后台时,除非我实际收到didDisconnect通知,否则我不应该拆除活动的会话/附件。有了这个,我假设Session和Accessory结构(也许是流)将在后台生存?
答案 0 :(得分:3)
我对外部附件框架的经验是,在稳健性方面,它最初的设计很差。在iOS 4.0之前,尝试连接多个附件会产生此错误消息:
Cannot use accessory. Only one accessory can be in use at a time.
现在似乎没有太多关注应用程序进入后台时配件会发生什么。我已经确信,正确的行为是在附件断开连接上释放EASession实例。但我不认为进入后台的应用程序有资格作为附件被断开连接。如果您记录配件的connectedID值,则没有什么可做的,您会注意到它们只是因为切换到背景并返回前景而不更改。我怀疑连接的EAAccessory实例列表不会刷新,除非通知EAAccessoryManager更改(连接/断开)附件。
我一直试图拆除并重新创建EASession实例,但这已经失败了。我现在要尝试在整个背景/前景过渡期间保持EASession的位置。我唯一担心的是我的应用程序在后台时不会收到EAAccessoryDidDisconnectNotification和EAAccessoryDidConnectNotification通知。