EAAccessory / EASession Teardown im Hintergrund

8

Wenn ich Apples EADemo als Basis benutze, versuche ich den Einfluss des Hintergrunds auf EAAccessories zu verstehen.

Wenn ich eine connectNotification erhalte, erhalte ich das Zubehör, überprüfe das Protokoll und besorge die Streams. Mit den Streams setze ich den Delegaten, plane auf RunLoop und öffne

Wenn ich jetzt in den Hintergrund gehe, zerreiße ich das alles. Ich ziehe alles zurück, was ich getan habe, und lasse alle Objekte los.

Ich mache diese Teardown auch auf einem didDisconnect.

Bei der Eingabe bekomme ich nicht immer eine didConnect, also laufe ich die connectedAccessory Liste und suche nach geeigneten Geräten.

- = - = - = -

Die EA-Demo richtet Sitzungen für eine Ansicht ein und bricht sie ab, so dass wir nicht sehen, ob es eine Hintergrundpersistenz gibt.

Der EA-Demo-Code scheint anzudeuten, dass Sie das Gerät herunterfahren und wieder einspielen können, solange das Gerät nicht getrennt wurde.

Die Sitzung und das Gerät scheinen jedoch manchmal in einen Zustand zu geraten, wenn das iOS-Gerät geschlafen hat oder die App in den Hintergrund gestellt hat und das Gerät die Daten nicht mehr bestätigt oder schlimmer wird, Daten aus dem Stream an den Punkt zu ziehen Der Stream füllt sich.

Frage: Wenn ich Hintergründe verwende, sollte ich eine aktive Sitzung / Zubehör nicht abreißen, es sei denn, ich bekomme tatsächlich eine didDisconnect-Benachrichtigung. Ich nehme an, dass die Session- und Accessory-Strukturen (und vielleicht die Streams) im Hintergrund überleben werden?

    
Lord Andrei 01.12.2010, 15:53
quelle

1 Antwort

3

Meine Erfahrung mit dem External Accessory Framework ist, dass es anfänglich in Bezug auf Robustheit schlecht entworfen wurde. Wenn Sie versuchen, bis zu iOS 4.0 eine Verbindung mit mehreren Zubehörteilen herzustellen, wird diese Fehlermeldung angezeigt:

%Vor%

Nun scheint es, dass es nicht viel Aufmerksamkeit darauf gibt, was mit Zubehör passiert, wenn Apps in den Hintergrund treten. Mir wurde zugesichert, dass das korrekte Verhalten für EASession-Instanzen ist, die beim Trennen von Zubehören freigegeben werden. Aber ich denke nicht, dass eine App, die in den Hintergrund tritt, als ein Zubehörteil betrachtet wird, das getrennt wird. Es gibt nicht viel zu tun, wenn Sie den Wert der connectedID für Ihr Zubehör protokollieren, Sie werden bemerken, dass sie nicht ändern, nur weil sie in den Hintergrund und zurück in den Vordergrund geschaltet haben. Ich vermute, dass die Liste der verbundenen EAAccessory-Instanzen nicht aktualisiert wird, wenn EAAccessoryManager nicht über eine Änderung (Verbinden / Trennen) eines Zubehörs informiert wird.

Ich habe versucht, EASession-Instanzen zu entfernen und neu zu erstellen, und dies ist fehlgeschlagen. Ich werde jetzt versuchen, die EASession während des Übergangs zwischen Hintergrund und Vordergrund an ihrem Platz zu belassen. Meine einzige Sorge ist, dass meine App im Hintergrund nicht die Benachrichtigungen EAAccessoryDidDisconnectNotification und EAAccessoryDidConnectNotification empfängt.

    
westsider 10.12.2010 17:01
quelle