2010-11-08 11 views
8

esperti Hallo,Solo l'applicazione applicationWillResignActive ha chiamato quando l'iPhone si spegne?

che ho provato quello che sta happing con la mia app quando l'iPhone è spento mentre l'applicazione è attiva. A tale scopo, ho registrato i metodi di callback del ciclo di vita dell'app nella console del debugger xcode.

Il risultato è stato: quando si preme per qualche volta il pulsante di accensione/spegnimento del dispositivo, viene chiamato applicationWillResignActive. L'iPhone mostra un'opzione per spegnere il dispositivo sullo schermo. Se acconsento a spegnere, l'iPhone si spegne. Ma in modo appropriato, , nessun altro metodo di callback come applicationDidEnterBackground o applicationWillTerminate è chiamato. Come risultato, tutti i dati andrebbero persi se non lo salvassi in applicationWillResignActive. Sebbene lo iOS Application Programming Guide indichi, è necessario salvare i dati di un'app in applicationDidEnterBackground e applicationWillTerminate.

Cosa ne pensi, è uno dei due metodi ancora chiamati e non viene più stampato nella console?

Cordiali saluti

+0

Interessante osservazione. Sembra possibile che venga chiamato dalla console per ora disconnesso, ma scommetto che non verrà mai chiamato. La mia impressione è che le app iOS siano gestite come la chiusura improvvisa di OSX, quindi il processo viene ucciso senza notifica. Ma poi di nuovo scommetto che gli utenti spengono raramente il loro dispositivo (se sanno anche come). –

+0

Ma il dispositivo si spegne anche se la batteria è scarica. È difficile testare il comportamento di un'applicazione in caso di una batteria empyty. Perché se colleghi il tuo iPhone al pc di sviluppo per registrare i metodi di callback nella console viene addebitato! Ma immagino che l'app si comporti in modo simile allo spegnimento manuale del caso. – Coco

+1

Ho provato su 3GS con iOS 5.0 ... se lo switch-off è riconosciuto, vengono chiamati applicationDidEnterBackground e applicationWillTerminate! Il dispositivo ha effettuato il log in console prima di spegnersi. – Dev

risposta

1

Penso che il test sia probabilmente corretto. L'app non è più attiva eppure non è passata in secondo piano - un po 'come quando chiamo arriva - quindi penso che le notifiche abbiano un senso.

Cosa si deve fare a riguardo? Il mio suggerimento non sarebbe nulla. Mi sembra che questo evento sia così raro che non vale la pena preoccuparsi. Se vuoi indossare cintura e bretelle, il salvataggio dello stato in 'applicationWillResignActive' dovrebbe funzionare a patto che non ci sia molto da conservare.

3

Ho fatto alcuni ulteriori test:

Ho salvato i cosiddetti metodi del ciclo di vita in un database e spento l'iPhone mentre l'applicazione è in esecuzione maggio. In realtà viene chiamato solo applicationWillResignActive. Ma dopo lo spegnimento la mia applicazione risiede nello stato "non in esecuzione", poiché il suo avvio avvia le chiamate di application:didFinsihLaunchingWithOptions: e applicationDidBecomeActive. Quindi i dati dell'applicazione vengono persi se non lo salvo in applicationWillResignActive.

Se la batteria è vuota mentre un'applicazione è in esecuzione applicationDidEnterBackground e applicationWillTerminate sono chiamati (nessuna chiamata di applicationWillResignActive!).

0

Ho provato questo. Questo è l'ordine in cui vengono chiamati i metodi.

  1. applicationWillResignActive - Quando l'utente mantiene a lungo il pulsante di blocco del dispositivo (e un cursore viene presentato che chiede all'utente "Slide per spegnere"

Se si fa scorrere, il dispositivo chiamerà seguenti due metodi nella vostra applicazione nel seguente ordine

  1. applicationDidEnterBackground

  2. applciationWillTerminate

Il dispositivo si spegne.

Sto assumendo che lo stesso accada quando la batteria si scarica.

Questo è stato testato su 3Gs con iOS 5.0

Spero che questo aiuti.

Problemi correlati