2012-12-05 22 views
7

È applicationDidEnterBackground chiamato prima dello applicationWillTerminate in un'app iOS? So che applicationWillTerminate non viene sempre chiamato (multitasking) - ma quando viene chiamato, è applicationDidEnterBackground chiamato SEMPRE prima? Non voglio duplicare il codice inutilmente includendolo in applicationWillTerminate se è già incluso in applicationDidEnterBackground, per un'app che supporta il multitasking.ApplicationDidEnterBackground è SEMPRE chiamato prima dell'applicazione applicationWillTerminate?

+0

Se si utilizza il multitasking e l'app è inserita in background, perché dovrebbe passare di nuovo 'applicationDidEnterBackground' prima che venga eliminata dall'utente? – Larme

+0

Era a mia conoscenza che se un utente uccide un'applicazione in esecuzione in background toccando due volte il pulsante Home e toccando il pulsante meno rosso che applicationWillTerminate non viene chiamato. Fammi sapere se mi sbaglio. – SAHM

+0

@Larme Forse una buona domanda da porsi è quando IS applicationWillTerminate richiede un'app che supporti il ​​multitasking. – SAHM

risposta

5

in ios 4.0 e successivi applicationDidEnterBackground viene chiamato al posto di applicationWillTerminate in modo da non doverli chiamare entrambi. Ecco la parte dei documenti Apple:

Discussione

in iOS 4.0 e successive, questo metodo viene chiamato al posto del applicationWillTerminate: metodo quando l'utente chiude un'applicazione che supporta l'esecuzione di sfondo . È necessario utilizzare questo metodo per sbloccare le risorse condivise, salvare i dati utente, invalidare i timer e memorizzare informazioni sullo stato dell'applicazione sufficienti per ripristinare l'applicazione su nello stato corrente nel caso in cui venga interrotta in un secondo momento. Dovresti anche disabilitare gli aggiornamenti all'interfaccia utente della tua applicazione ed evitare l'uso di alcuni tipi di risorse di sistema condivise (come il database dei contatti dell'utente). È inoltre fondamentale evitare di utilizzare OpenGL ES nello sfondo .

L'implementazione di questo metodo ha circa cinque secondi per eseguire qualsiasi attività e restituire. Se è necessario ulteriore tempo per eseguire le attività finali , è possibile richiedere ulteriore tempo di esecuzione dal sistema chiamando beginBackgroundTaskWithExpirationHandler :. Nella pratica , dovresti tornare da applicationDidEnterBackground: come il più rapidamente possibile. Se il metodo non ritorna prima che il tempo scada , l'applicazione viene chiusa e cancellata dalla memoria.

è necessario eseguire qualsiasi attività in materia di regolare l'interfaccia utente prima di questo metodo uscite, ma altre attività (come il salvataggio dello stato) dovrebbero essere spostati in una coda di invio concomitante o thread secondario, se necessario. Poiché è probabile che le attività in background vengano avviate in applicationDidEnterBackground: non verrà eseguito fino a dopo le uscite del metodo, è necessario richiedere un ulteriore tempo di esecuzione in background prima di iniziare le attività con . In altre parole, chiamare prima beginBackgroundTaskWithExpirationHandler: quindi eseguire l'attività su una coda di invio o un thread secondario.

L'applicazione distacca anche una notifica UIApplicationDidEnterBackgroundNotification intorno al stesso tempo chiama questo metodo per dare gli oggetti interessati la possibilità di rispondere alla transizione.

Per ulteriori informazioni su come eseguire il passaggio con garbo allo sfondo e per informazioni su come avviare le attività in background con il tempo di uscita , consultare la Guida alla programmazione dell'app per iOS.

Spero che questo aiuti a chiarire il problema per voi uomini. Adrian

Questo è il collegamento alla nota tecnica disponibile nella sezione sviluppatori. Si tratta di networking e multitasking. Il metodo effettivo utilizzato in questo documento riguarda solo lo applicationDidEnterBackground e poiché iOS 5 ha un sistema chiamato watchdog che termina l'app se la rete non risponde automaticamente. Quindi non è necessario chiamare lo applicationWillTerminate e provare ad eseguire i codici per consentire alla tua app di terminare la propria attività prima che l'app venga chiusa. L'app entrerà in background e continuerà il suo compito fino al completamento dell'ultima attività. Spero che abbia senso, ma ecco il link. Si prega di leggere la sezione del cane da guardia. https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841

Spero che questo aiuti. :)

+0

Grazie, l'ho capito e ho tutto il codice necessario in applicationDidEnterBackground. Sto solo cercando di capire quale codice includere in applicationWillTerminate e quale lasciare fuori. – SAHM

+0

Apprezzo molto il commento sul timeout di applicationDidEnterBackground. – SAHM

+0

Non ho nemmeno chiamato nulla in applicazione, terminerà il metodo più. lo lascio come predefinito che si presenta quando si creano le viste necessarie. a partire da ios 5 ho chiamato tutti i metodi in applicazione è entrato in background e funziona bene per me. non ne conosco altri che siano fatti. –

Problemi correlati