Pipe di asincudpsocket rotto dopo aver chiuso il telefono con applicazione sospesa in background
-
28-10-2019 - |
Domanda
Sto usando il Asyncudpsocket Biblioteca di terze parti nella mia app per iPhone e per la maggior parte funziona alla grande. Ho un'istanza singleton di un AsyncUDPSocket
che uso per tutto il traffico di rete. La mia app è registrata per il monitoraggio della posizione in background e si sveglierà e invierà pacchetti di aggiornamento della posizione sulla rete durante l'esecuzione in background. Tutto questo funziona in modo schiacciante in base allo sfondo, in primo piano, al telefono bloccato o sbloccato, tranne quando faccio quanto segue:
- Inizia la mia app
- Disabilita il monitoraggio della posizione nelle impostazioni della mia app (quindi nessun risveglio in background)
- Premere il pulsante Home (l'app va in background, la presa è "asciugata" con il resto dell'app)
- Blocca il telefono
- Sblocca il telefono
- Riprendi l'app
- Tenta di riavviare il monitoraggio e inviare qualcosa dalla presa. Non appena ci provo, ottengo un
SIGPIPE
/EPIPE
Errore e l'app si arresta in modo anomalo.
Ho pensato che il modo migliore per gestire questo sarebbe quello di chiudere e rilasciare la presa ogni volta che l'applicazione esce e il monitoraggio dello sfondo non è abilitato, ma quando provo [socket close]
o [socket release]
sul AsyncUDPSocket
, Ottengo vari EXC_BAD_ACCESS
errori. Ho presentato un bug con il team Dev, ma mi chiedevo se qualcuno qui potesse dare alcune idee su come evitare il SIGPIPE
Errore interamente o altri modi per mantenere viva la presa senza rilasciarla. Grazie.
Soluzione 2
Nel caso in cui qualcuno sia curioso (il che, a giudicare dalle statistiche di questa domanda, non lo sono), non sono stato in grado di determinare cosa stava causando il SIGPIPE
errore, ma alla fine ha risolto i miei problemi di gestione della memoria (che erano dovuti a un'implementazione difettosa di onUdpSocketDidClose
Nel mio delegato) in modo da poter reinizializzare la presa ogni volta che l'app riavvia.
Altri suggerimenti
Ottima osservazione - Sì, sembra che dopo aver inviato l'attività in background e quindi bloccare il telefono, le prese vengono lasciate cadere e la prossima volta che provi a usarlo si viene bludgeon con un sigipe.
Idee su come affrontarlo qui:Sigpipe Crash Quando si commuovi l'attività di sfondo(È impostato Ignora per Sigpipe per l'intera app, o per la presa o fornisce Hanler per esso)
ps. Inoltre, sembra che l'impostazione per ignorare Sigpipe non funzioni con il debugger allegato, quindi confronta con e w/o.