2012-05-07 16 views
7

Nella mia applicazione quando l'utente preme il pulsante home, salverò i dati in NSUserDefaults. L'applicazione è in esecuzione in background. Quando l'utente riavvia l'app, utilizzo il metodo applicationWillEnterForeground per visualizzare i dati salvati.Distinguere tra applicationDidEnterBackground e applicationWillTermimate

Tuttavia, quando l'utente tocca due volte sul pulsante Home e chiude l'applicazione selezionando il segno meno sull'app, è necessario salvare diversi dati con le stesse impostazioni predefinite dell'utente. Ma quando esco dall'applicazione, applicationWillTerminate viene chiamato a volte e talvolta no.

Quindi, come posso differenziare che l'applicazione è ridotta a icona o è stata chiusa?

+0

È possibile utilizzare applicationDidEnterBackground, una volta premuto il pulsante Home, questo metodo viene sempre chiamato. – rishi

+0

@rishi Sembra che la vera domanda nel post sia perché 'applicationWillTerminate' a volte non viene chiamato quando l'app è terminata ... – Hailei

+0

Sì, ma come posso sapere che l'applicazione è appena minimizzata o è stata chiusa? Voglio dati diversi da salvare per queste due diverse condizioni. –

risposta

7

Ogni volta che l'utente tocca una sola volta e l'applicazione passa in background in quel momento applicationDidEnterBackground chiama sempre. In questo metodo è possibile aggiornare/memorizzare temporaneamente il valore NSUserDefaults.

Se nel caso, l'applicazione verrà di nuovo in primo piano con la terminazione utilizzando doppi rubinetti, applicationDidBecomeActive chiamerà, in cui è possibile ancora una volta aggiornare/rimuovere temporaneamente memorizzato il valore NSUserDefaults. E se l'utente chiude l'applicazione con due tocchi, il valore memorizzato verrà mantenuto con NSUserDefaults.

0

applicazioni che supportano l'esecuzione in background, questo metodo non è generalmente chiamato quando l'utente chiude l'applicazione perché l'applicazione si sposta semplicemente per lo sfondo in questo caso

Se ci sono dati che è necessario salvare quanto si dovrebbe farlo quando l'app va in secondo piano.

0

applicationWillTerminate viene chiamato solo quando il processo delle applicazioni viene effettivamente eliminato. Cioè, l'utente lo uccide usando il pulsante di chiusura negativo rosso nel commutatore di attività, oppure il sistema stesso lo uccide mentre è in background (ad esempio in condizioni di memoria insufficiente).

Per le vostre esigenze, è preferito applicationDidEnterBackground; viene chiamato ogni volta che l'utente riduce a icona l'applicazione premendo il pulsante Home o passando a un'altra applicazione.

5

Informazioni sulla differenza tra i metodi UIApplicationDelegate, fare riferimento a UIApplicationDelegate Protocol Reference. applicationDidEnterBackground: verrà sempre chiamato quando viene premuto il pulsante Home. Ma sembra che non si possa chiamare applicationWillTerminate:.

Se la tua app non è in esecuzione in primo piano, può essere in modalità background o in modalità sospesa. Fare riferimento alla sezione "Ciclo di avvio app" di iOS App Programming Guide - App States and Multitasking.

Quando l'app è in esecuzione in background e gli eventi di monitoraggio, applicationWillTerminate: verrà chiamato quando viene terminato. Quando l'app è sospesa, non lo farà. Vedere la descrizione nella sezione "App terminazione":

Anche se si sviluppa la vostra applicazione utilizzando iOS SDK 4 e versioni successive, è comunque necessario essere preparati per la vostra applicazione per essere ucciso senza alcuna notifica. L'utente può uccidere app in modo esplicito utilizzando l'interfaccia utente multitasking. Inoltre, se la memoria viene limitata, il sistema potrebbe rimuovere le app dalla memoria per creare più spazio. Le app sospese non vengono avvisate della chiusura ma se la tua app è attualmente in esecuzione in background (e non sospesa), il sistema chiama il metodo applicationWillTerminate: del delegato dell'app. L'app non può richiedere ulteriore tempo di esecuzione in background con questo metodo.

1

applicationDidEnterBackground - Ogni volta che l'utente preme il tasto di casa e l'applicazione andrà in background in quel momento è chiamare il metodo applicationDidEnterBackground. Viene chiamato ogni volta che l'utente riduce a icona l'applicazione premendo il pulsante Home o passando a un'altra applicazione.

applicationWillTerminate - Viene chiamato solo quando il processo delle applicazioni viene effettivamente eliminato. Cioè, l'utente lo uccide usando il pulsante di chiusura negativo rosso nel commutatore di attività, oppure il sistema stesso lo uccide mentre è in background (ad esempio in condizioni di memoria insufficiente). La tua app non può richiedere ulteriore tempo di esecuzione in background con questo metodo.

1

applicationDidEnterBackground - Questo metodo verrà chiamato quando l'utente imposta l'applicazione in background premendo il pulsante Home.

applicationWillTerminate - Questo metodo verrà chiamato quando l'utente chiude l'app in modalità background premendo il pulsante meno rosso.

Problemi correlati