Frage

Meine app verwendet NSTimer und es scheint, dass NSTimer nicht ausgelöst, wenn das iPhone geht in den stand-by-Modus (entweder durch drücken der hardware-Taste, oder von der Leerlauf-timer).

Wenn ich aktiviere das iPhone wieder, meine app immer noch im Vordergrund.Was passiert mit Drittanbieter-apps, wenn das iPhone in den stand-by Modus?

War es hilfreich?

Lösung

Obwohl es nicht offensichtlich hier, glaube ich, das ursprüngliche Plakat, das eine Antwort auf seine Frage finden war durch einen Thread starten ( hier, ) im iPhone Developer Forum (die ich hatte, um schließlich selbst zu finden, weil die Informationen hier nicht geteilt wurden).

Falls jemand anderes die gleiche Frage hat und findet die Seite in der Zukunft, hier ist eine hilfreiche Antwort, die von jemandem auf dem Apple-Forum gepostet wurde als „eskimo1“ (die ich bearbeitet habe etwas, so dass es einfacher ist, zu lesen, ohne den Kontext, der durch das gesamte ursprüngliche Gewinde versehen ist):

  • In Bezug auf iPhone App Status Terminologie, „aktiv“ bedeutet nicht „wach“, bedeutet es, „die GUI angebracht“. Denken Sie daran, analog sein zu „vorderste“ in Mac OS X. Wenn Sie das Gerät die App aber das Gerät deaktiviert sperren kann oder nicht schlafen kann gehen
  • iPhone OS schläft selten, wenn das Gerät an Hauptstromversorgung angeschlossen ist (das heißt, über USB). Es kann schlafen, wenn sie mit Batterie betrieben, jedoch.
  • Eine kurze Zeit, nachdem der Bildschirm (20 Sekunden nach Oliver Drobnik) gesperrt ist, für das Gerät. Das ist wie der Deckel auf dem Laptop zu schließen; alle Aktivitäten auf dem Haupt-CPU hält.
  • Dies geschieht nicht, wenn das Gerät Audio in der rechten Audio-Sitzung abgespielt wird. Siehe DTS Q & A QA1626 "Audio Session - Sicherstellung Audio-Wiedergabe wird fortgesetzt, wenn der Bildschirm gesperrt ist" .
  • Beachten Sie, dass die idleTimerDisabled Eigenschaft (die eingeschaltet werden können, um den Bildschirm vor dem Ausschalten zu verhindern, während die App läuft) ist über den Bildschirm nach Benutzer Inaktivität sperren. Es ist nicht direkt an den Systemschlafbezogenen (es ist indirekt in Zusammenhang, dass das System kurz schlafen kann, nachdem er gesperrt ist).

Andere Tipps

Finden Anwendung Unterbrechungen in der iPhone OS Programming Guide, vor allem die applicationWillResignActive und applicationDidBecomeActive Veranstaltungen.(Der ganze guide ist durchaus lesenswert.) Wenn Sie die Ereignisse zu ignorieren, wird der timer scheint zu gehen für eine Weile und Stoppt dann.Klingt logisch, kann die Anwendung leicht zu entleeren die Batterie, wenn Sie ständig laufen.Und was genau passiert mit dem Antrag?Ich denke, es funktioniert einfach nicht bekommen keine CPU-Zeit – es friert und taut nur auf, wenn Sie schalten Sie die Maschine wieder "on".

Mein erster Rat ist, kann den Leerlaufzeitgeber nicht deaktivieren, das ist nur ein Hack. Wenn Sie einen Timer am Leben zu halten während der UI-Ereignisse den Timer auf der aktuellen Laufschleife laufen mit NSCommonModes:

// create timer and add it to the current run loop using common modes

self.timer = [NSTimer timerWithTimeInterval:.1 target:self selector:@selector(handleTimer) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

habe ich die Informationen zu diesem Beitrag für eine kleine Probe, die ich aufbaute. Dies ist der Code, den ich verwenden, wenn ich die Wiedergabe eingeleitet, um die Audiodaten von Anhalten zu verhindern:

AudioSession.Category = AudioSessionCategory.MediaPlayback;

Und wenn die Anwendung mit der Wiedergabe erfolgt auf den ursprünglichen Wert zurückgesetzt werden:

AudioSession.Category = AudioSessionCategory.SoloAmbientSound;

Die vollständige Probe ist hier:

http://github.com/migueldeicaza/monotouch-samples/ Baum / Master / StreamingAudio /

Ich war mit dieser Frage vor kurzem in einer App stand ich auf, dass ich Arbeit verwendet mehrere Timer und spielt einige Audio-Prompts und machte zwei relativ einfache Änderungen:

  1. In der AppDelegate implementiert ich die folgenden Methoden und es bloße Anwesenheit erlaubt die App fortzusetzen, wenn der Bildschirm gesperrt ist

    // this receives the notification when the device is locked
    - (void)applicationWillResignActive:(UIApplication *)application
    { 
    }
    
    // this receives the notification that the application is about to become active again
    - (void)applicationWillBecomeActive:(NSNotification *)aNotification
    {
    }
    

    Referenzen: UIApplicationDelegate Protocol Reference & NSApplication Klassenreferenz in der API-doc (über Xcode, nur für applicationWillBecomeActive suchen).

  2. Aus dem Haupt viewcontroller Klasse eines AVAudioPlayerDelegate und verwendete diesen Code von Apples „AddMusic“ Probe, die die Audio-Warnungen die App gespielt Mischung gut in das iPod-Audio zu machen etc ...

    Ich ließ nur diesen Code in eine Methode, die während viewDidLoad aufgerufen wird. Wenn diese Sie interessiert, fallen Sie in die Kategorie für diese „wer sollte diese doc lesen“: Audio Session Programming Guide

    // Registers this class as the delegate of the audio session.
    [[AVAudioSession sharedInstance] setDelegate: self];
    
    // The AmbientSound category allows application audio to mix with Media Player
    // audio. The category also indicates that application audio should stop playing 
    // if the Ring/Siilent switch is set to "silent" or the screen locks.
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];
    
    // Activates the audio session.
    NSError *activationError = nil;
    [[AVAudioSession sharedInstance] setActive: YES error: &activationError];
    

Ich glaube, Ihre Anwendung sollte in der Regel laufen, wenn ausgesetzt. (Man denke Pandora Radio)

Überprüfen Sie, ob Ihre Timer aufgrund Ihrer Ansicht versteckt wird aufgehoben wird oder ein anderes Ereignis auftritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top