È 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?
risposta
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. :)
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
Apprezzo molto il commento sul timeout di applicationDidEnterBackground. – SAHM
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. –
- 1. ApplicationWillTerminate in iOS 4.0
- 2. Distinguere tra applicationDidEnterBackground e applicationWillTermimate
- 3. DataBindingComplete è sempre chiamato più volte
- 4. FinderSync: beginObservingDirectoryAtURL non è sempre chiamato
- 5. NSUncaughtExceptionHandler non è sempre chiamato iOS 6
- 6. Backbone non sempre chiamato
- 7. doFilter non sempre chiamato
- 8. Swift LocationManager didChangeAuthorizationStatus Sempre chiamato
- 9. NSManagedObjectContextObjectsDidChangeNotification non sempre chiamato all'istante
- 10. Firefox onLocationChange non sempre chiamato
- 11. EKEventViewDelegate didCompleteWithAction non sempre chiamato
- 12. Android: onResume viene sempre chiamato dopo onCreate?
- 13. AngularJS - transformRequest non è sempre chiamato a $ risorsa
- 14. onCreateOptionsMenu chiamato prima onCreate android
- 15. ViewDidLoad viene chiamato prima di initWithNibName?
- 16. Solo l'applicazione applicationWillResignActive ha chiamato quando l'iPhone si spegne?
- 17. Prima ricerca DNS fallisce sempre
- 18. ObservanceValueForKeyPath viene sempre chiamato dal thread principale?
- 19. locationManager: didUpdateLocations: essere sempre chiamato più volte
- 20. JavaScript - onclick evento sempre chiamato automaticamente
- 21. non onPrepareOptionsMenu sempre chiamato in Fragments
- 22. jquery posticipato - "sempre" chiamato al primo rigetto
- 23. Come interrompere il thread di ritorno prima Join() è chiamato
- 24. C++ override metodo non sempre chiamato
- 25. Devo interrompere il tracker di Google Analytics in applicationWillTerminate? (iOS)
- 26. self.window è sempre nil
- 27. Perché ContentProvider.onCreate() viene chiamato prima di Application.onCreate()?
- 28. viewDidLoad chiamato prima di prepareForSegue termina
- 29. Java notify() viene chiamato prima di attendere()
- 30. Storyboard segue viene chiamato prima di UITableView'sSelectRow
Se si utilizza il multitasking e l'app è inserita in background, perché dovrebbe passare di nuovo 'applicationDidEnterBackground' prima che venga eliminata dall'utente? – Larme
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
@Larme Forse una buona domanda da porsi è quando IS applicationWillTerminate richiede un'app che supporti il multitasking. – SAHM