2016-04-29 16 views
0

Ich evaluiere Code, der Aufrufe an beginBackgroundTaskWithExpirationHandler stapelt, um einen Timer im Hintergrund zu lassen. Ich muss zugeben, dass es eine ziemlich clevere Idee ist, aber ich bin mir nicht sicher, ob dies die beste Vorgehensweise ist.repetitive Aufrufe an beginBackgroundTaskWithExpirationHandler

So ist der Fluss:

  1. Anruf beginBackgroundTaskWithExpirationHandler mit einem Callback-Handler
  2. Wenn es gibt, etwas zu tun, dann rufen Sie wieder
  3. spülen und wiederholen, für TaskInvalid auf dem Weg Überprüfung

Ich weiß, dass 180 Sekunden ist die maximale Zeit, aber das kann in einigen Fällen kürzer sein.

Zu den Fragen:

1: Ist das legal?

2: Würden Sie vermuten, dass Apple OK wäre, wenn Sie der App 3 Minuten Hintergrund immer und immer wieder geben und den Prozess für eine Stunde im Hintergrund belassen?

3: Würden Sie darauf zählen?

Vielen Dank im Voraus!

+2

Haben Sie es tatsächlich auf einem realen Gerät versucht, das nicht mit Xcode verbunden ist? Ich bezweifle, dass dieser "Trick" Ihnen mehr als die 180 Sekunden im Hintergrund geben wird. – rmaddy

Antwort

0

Würden Sie vermuten, dass Apple OK wäre, wenn Sie der App 3 Minuten Hintergrund immer und immer wieder geben und den Prozess für eine Stunde im Hintergrund belassen?

Nein, Apple wäre nicht in Ordnung, auch wenn Sie es tun könnten. Sie haben aus einem bestimmten Grund ein 3-Minuten-Limit festgelegt, um sicherzustellen, dass Apps nicht ohne Wissen des Benutzers im Hintergrund laufen, CPU-Zyklen, Speicher und Akku leer sind. (In der Tat war die "endliche Aufgabe" Grenze 5 Minuten, aber Apple hat es vor einigen Jahren noch auf 3 Minuten beschränkt.) Stellen Sie sich eine Welt vor, in der alle App-Entwickler diese 3-Minuten-Grenze routinemäßig umgehen würden Die Akkus sind schnell leer und Anwendungen im Vordergrund sind weniger reaktionsschnell und haben weniger Arbeitsspeicher.

Damit hat Apple eine sehr enge Reihe von Operationen identifiziert, die akzeptabel sind, um im Hintergrund weiter zu laufen (VOIP, Navigations-Apps, Musik-Apps, Bluetooth-Betrieb usw.), wo der Benutzer vernünftige Erwartungen hat Batterie- und Leistungseinfluss.

Es gibt auch Aufgabenklassen, die begrenzte Hintergrundfunktionen verwenden (z. B. Zeit für die Ausführung einer Task mit endlicher Länge, opportunistisches periodisches Hintergrundabrufen, signifikante Standortwechselservices, um dem Benutzer die Möglichkeit zu geben, auf Push oder lokal zu reagieren) Benachrichtigungen usw.). Ziel ist es, ein sinnvolles Gleichgewicht zwischen den Hintergrundfähigkeiten zu bieten und gleichzeitig die Auswirkungen auf die Batterie zu minimieren.

Unterm Strich entmutigt/beschneidet Apple den Einsatz wahlloser Hintergrundoperationen. Im App Store Guidelines, sagen sie explizit

2,16 Multitasking Apps nur Hintergrunddienste für ihre beabsichtigten Zwecke nutzen: VoIP, Audio-Wiedergabe, Standort, Aufgabenerledigung, lokale Benachrichtigungen etc.

...

4.5 Apps Hintergrund Location Services mit einem Grund bieten müssen, die den Zweck der Anwendung verdeutlicht, beschrieben unter Verwendung von Mechanismen in den Human Interface Guidelines

all dies gesagt ist, wenn Sie beschreiben, was Sie gerade diese benötigen Hintergrundoperation für, könnten wir in der Lage sein zu beschreiben, welche der vielen verschiedenen Hintergrundfähigkeiten, die Apple anbietet, Sie verwenden könnten, um den gewünschten Effekt zu erzielen. Alle diese Schnittstellen wurden entwickelt, um spezifische Probleme zu lösen und gleichzeitig die Funktionalität mit den knappen Ressourcen auf unseren Geräten in Einklang zu bringen. Aber wenn es so etwas wie "Hey, ich möchte meinen Server alle fünf Minuten anpingen", dann nein, Apple wird die Stirn runzeln.

Weitere Informationen finden Sie im Kapitel Background Execution der App-Programmieranleitung für iOS unter .