Dalla documentazione del servizio di notifica push Apple:
Each device establishes an accredited and encrypted IP connection
with APNs and receives notifications over this persistent connection.
Questo significa che usa una sorta di connessione persistente basata su socket. Potrebbe essere il suo protocollo proprietario o WebSocket , ecc. Le "azioni periodiche" che stai chiedendo sono di solito implementate in questi protocolli al livello più basso possibile utilizzando i socket TCP / IP e vengono costantemente sottoposti a polling per i nuovi dati sul socket . Una volta che i dati sono stati letti dal socket, viene attivato un evento per eseguire alcune azioni come visualizzare una notifica sul dispositivo.
Per spiegare meglio, il modo in cui i socket funzionano è che il dispositivo effettua una connessione a un server remoto, il server remoto invia dati al dispositivo e viene inserito nel buffer del socket, quindi il dispositivo legge il buffer del socket e fa qualcosa con il dati. Nel momento in cui i dati vengono trasferiti sul dispositivo, il dispositivo li elaborerà. Questo perché il tuo dispositivo sta verificando nuovi dati sul buffer del socket del socket. Prova a leggere i dati e, se riceve dati, li invia per essere processato e quindi prova a leggere di nuovo i dati; se non riceve dati, prova a leggere di nuovo i dati, per sempre. Se la connessione al server remoto viene mai disconnessa, tenta semplicemente di connettersi di nuovo fino a quando non riesce.
La documentazione del codice che ho linkato in precedenza è tratta dalla libreria ASIO di Boost che è ampiamente usato per i socket in C ++. L'implementazione e l'utilizzo possono essere semplificati come segue:
01 start program
02 try to connect to server by using a socket
03 if not connected to server, goto 02
04 try to read data on socket
05 if data was read, process data
06 goto 03
Nel passaggio 03
sopra, il dispositivo sa quando sei offline e non tenterà di connettersi di nuovo fino a quando non torni online (il dispositivo invia un evento quando ti connetti a Internet, quindi accadrà tutto istantaneamente).
Quando nessun dato è stato letto nel passaggio 04
sopra, tenta immediatamente di leggerlo di nuovo senza attendere (supponendo che tu sia ancora connesso al server). Ci vuole una quantità minima di potenza di elaborazione per cercare ripetutamente di leggere i dati sul socket, quindi non c'è bisogno di preoccuparsi della batteria o delle risorse sprecate (vedi la risposta @ malhal qui per una spiegazione migliore su questo e anche su come funziona quando il dispositivo sta dormendo).