2010-12-01 3 views
8

Apple의 EADemo를 기본으로 사용하여 EAAccessories에 대한 backgrounding의 영향을 이해하려고합니다.배경 동안 EAAccessory/EASession 해체

connectNotification을 받으면 액세서리를 받고 프로토콜을 확인하고 스트림을 가져옵니다. 스트림을 사용하여 대표단을 설정하고 RunLoop에서 일정을 잡고 열기를 엽니 다.

현재 백그라운드로 들어가면이 모든 것이 다운됩니다. 내가 한 모든 것을 취소하고 모든 물건을 놓습니다.

didDisconnect에서도이 분해 작업을 수행합니다.

입력시 항상 didConnect가 표시되지 않으므로 connectedAccessory 목록을 살펴보고 적절한 장치를 확인하십시오.

- = - = - = -

EA의 데모 설정하고 우리가 배경 지속성이 있는지 여부를 확인하지 않도록 뷰에 세션을 눈물.

EA 데모 코드는 장치 자체가 연결이 끊어져 있지 않은 한 분해하여 다시 들어가는 것이 좋습니다.

하지만 iOS 기기가 잠자기 상태이거나 앱을 배경으로 놓았을 때 기기가 데이터 수신을 멈추거나 악화되면 데이터가 스트림에서 포인트로 끌어 오는 것을 멈 춥니 다. 그 흐름이 가득 차있다.


질문 : 배경 처리를 사용하는 경우 내가 실제로 didDisconnect 통지를 얻을하지 않는 한, 나는 활성 세션/액세서리를 해체해서는 안된다. 이것으로 세션과 액세서리 구조 (그리고 아마도 스트림)가 백그라운드에서 살아남을 것이라고 가정합니다.

+0

이것에 대해 어떤 진전을 보았습니까? 나는 비슷한 문제를 다루고있다. 감사. – westsider

답변

3

외부 액세서리 프레임 워크에 대한 경험은 처음에는 견고성 측면에서 잘못 설계된 것입니다. iOS 4.0 버전까지 여러 액세서리에 연결하려고하면이 오류 메시지를 얻을 것이다 :

Cannot use accessory. Only one accessory can be in use at a time. 

는 이제 앱이 백그라운드로 갈 때 액세서리 어떻게되는지에 많은 관심이 없었던 것 같다. 악세사리 연결 해제시 EASession 인스턴스가 해제되도록 올바른 동작을 보장합니다. 하지만 백그라운드로 들어가는 앱이 연결이 끊어지는 액세서리로 간주하지 않습니다. 액세서리의 connectedID 값을 기록하면 별다른 변화가 없을 것입니다. 이 아님을 알 수 있습니다.은 백그라운드로 전환 한 후 포 그라운드로 돌아 갔음을 나타냅니다. EAAccessoryManager에 액세서리의 변경 (연결/연결 해제)이 통지되지 않으면 연결된 EAAccessory 인스턴스의 목록이 새로 고쳐지지 않는 것으로 생각됩니다.

저는 EASession 인스턴스를 해체하고 다시 만들려고했지만 실패했습니다. 이제 백그라운드/포 그라운드 전환을 통해 EASession을 그대로 두려고합니다. 내 관심사는 백그라운드에서 EAAccessoryDidDisconnectNotification 및 EAAccessoryDidConnectNotification 알림을 내 앱이받지 못한다는 것입니다.

+2

제 이해는 [Disc | C] onnect가 backgrounding을 제어하는 ​​상위 래퍼 프로세스에 의해 캐시되었는지 여부입니다. 우리는 EAAccMgr리스트를 질의하는 것을 완전히 멈췄다. 우리는 전적으로 통지에 의존합니다. –

+2

앱이 백그라운드로 들어가면 바로 EAAccessoryDidDisconnectNotification을 얻습니다. – iter