iphone - NSTimers im hintergrund
Im entwickeln einer app muss im hintergrund laufen. Es ist ein Standort-basierte app, läuft also die ganze Zeit, die OS nicht töten.
Sollte es schicken einige info alle 10 Sekunden(nur für debugging), habe ich einen timer einstellen, nachdem Ihr in den hintergrund. Ich setze einen Haltepunkt in die Funktion ausgeführt werden soll, alle 10 Sekunden, das ist nie genannt, aber wenn ich pause die app und dann weiter den timer aufgerufen wird, und dann der timer ausgeführt wird alle 10 Sek. ohne Probleme, komisch richtig?
Dachte ich, dass der timer wäre, die Ausführung sowieso, wenn ich nicht Debuggen, ist es aber nicht, gleiche wie, wenn ich nicht pausiere das debugging.
Meine Frage ist, WARUM?? Der timer richtig eingestellt ist(nehme ich an), da funktioniert es nach der Pause, aber es ist nicht.
Irgendwelche Ideen?
Die Art, wie ich der timer eingestellt ist:
self.timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(doStuff) userInfo:nil repeats:YES];
Und in der Funktion habe ich eine Verbindung zu einem webservice.
Dank.
mögliche Duplikate von NSTimers im hintergrund läuft?
InformationsquelleAutor subharb | 2012-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe eine ähnliche app-design und stecken auf die gleiche Sache. Was ich gefunden irgendwo im internet ist das hinzufügen dieser Art von Anweisung
applicationDidEnterBackground:
Dies sagt dem Betriebssystem, dass Sie immer noch die Dinge und nicht zu stoppen.
Habe ich meine timer angebracht, um diese Funktion
Ich den timer in meiner location manager delegieren Methoden.
Ich fühle deinen Schmerz. Ich fand, dass diese Dinge, die waren super pingelig. Das ist was für mich gearbeitet. Ich hoffe, es hilft. Ich habe festgestellt, dass gibt es nicht wirklich Einschränkungen in dem, was Sie tun können, in den hintergrund.
Eigentlich ist es nicht fix mein ganzes problem. Nun bekomme ich ein crash-log, anscheinend weil ich nicht Ende der hintergrund-task, und das ist, weil die Aufgabe sollte nie abgeschlossen, solange die app im hintergrund ist. Die NStimer wiederholen endlesly. Ist das möglich? oder, da es eine Standort-app, die ich sollte, Haken Sie die Aktionen, um das GPS?
Ich bin mir nicht genau sicher, was den Absturz aus. Ich bin in der Lage zu halten eine socket-Verbindung in den hintergrund, so dass ich mir ziemlich sicher bin, dass Sie nicht nur auf location based Dinge. Aber wie gesagt, diese Probleme sind nicht einfach zu lösen. Sorry, ich konnte nicht mehr helfen. Mein timer läuft endlos (soweit ich das beobachtet habe) eine Sache zu prüfen, ist der Ausdruck des backgroundTimeRemaining (es sollte nie nach unten gehen und werden sehr groß)
Das ist richtig, ich habe eine Zeitschaltuhr außerhalb der app-delegate-Klasse, die ständig läuft/abläuft/zurücksetzen. Und nur beginBackgroundTaskWithExpirationhandler rechts, bevor es geht, in den hintergrund. Mein timer-Methode ist genau so wie ich es gepostet. Werden Sie sicher, dass Sie Lage in den hintergrund-Modus-Feld in der plist
Dies funktionierte perfekt für mich, außer es erforderlich __block vor UIBackgroundTaskIdentifier. Danke!
InformationsquelleAutor utahwithak
Könnte es Einschränkungen auf, was Sie tun können, in den hintergrund. Versuchen Sie, den timer auf die Schlinge, bevor er in den hintergrund. Selbst das könnte nicht funktionieren; es kann sein, dass der code nur von dir, der kann im hintergrund laufen, ist der code, genannt der Kern Lage von Methoden, die Sie sich angemeldet haben (z.B.
locationManager:didUpdate...
). Aber mein Eindruck ist, dass der Timer bereits läuft, bevor Sie beginnen, gehen in den hintergrund und laufen weiter.Ich glaube, dass, wenn Sie versucht hatte, was ich vorgeschlagen (einrichten der timer während noch im Vordergrund steht), würde es das problem gelöst haben. Dies ist in der Tat wahrscheinlich die gleiche wie die Lösung, die Sie akzeptiert. Ihr problem war, dass Sie bereits im hintergrund und Ihre runloop hatte aufgehört zu laufen, bevor Sie den timer. Anhalten an einem Haltepunkt und fortsetzen, während im hintergrund verleiht Ihrem runloop eine neue chance zu laufen, so dass an dieser Stelle der timer wurde Hinzugefügt, um die runloop. Das ist Spekulation, aber ich glaube, es erklärt die Phänomene.
InformationsquelleAutor matt