creé par de experimentos:¿Qué ocurre con TCP y UDP (con multidifusión) de conexión cuando una aplicación iOS hizo entrar en el fondo
Configuración 1: He creado una aplicación TCP remitente y una aplicación TCP Receptor.
Para este experimento, que comenzó el emisor TCP en un dispositivo iOS y el receptor TCP en otro dispositivo iOS. Y luego se verifica que ambos hicieron conexión y enviaron y recibieron datos. Luego pongo la aplicación TCP Receiver en segundo plano. La aplicación TCP Sender indicó que se perdió la conexión y se colgó (sí, así lo hice).
Configuración 2: He creado una aplicación remitente UDP y una aplicación de receptor UDP.
Igual que el anterior, que comenzó la aplicación del remitente UDP en un dispositivo iOS y la aplicación del receptor UDP en otro dispositivo iOS. En la aplicación UDP Receiver me suscribí a un grupo de multidifusión, etc. Comprobé que la aplicación UDP Receiver está recibiendo los datos de ese grupo de multidifusión enviado por la aplicación UDP Sender. Luego coloco la aplicación UDP Receiver en segundo plano. Después de 2 minutos, obtengo la aplicación UDP Sender para enviar otro dato. Luego salgo de la aplicación UDP Sender por completo y apago el dispositivo iOS. Luego espero otros 2 minutos o más, y luego abro la aplicación UDP Receiver desde el fondo. La aplicación UDP Receiver recibió los datos enviados por la aplicación UDP Sender antes de que finalizara.
En setup1, mi explicación es porque TCP está orientado a la conexión.
En setup2, entiendo que UDP no tiene conexión. ¿Alguna explicación de por qué setup2 funcionó en mi experiencia? (Todavía recibe datos incluso en modo de fondo)
Por cierto, supongo que cuando dices 'fondo' te refieres a 'suspendido' ya que no mencionaste que intentabas ejecutar una aplicación de fondo (VOIP, música, etc.) a menos que hagas algo especial, el fondo es un estado transitorio para su aplicación que se suspende rápidamente después de ingresar el fondo. Consulte los documentos del ciclo de vida de la aplicación Apple iOS. – smparkes
Excelente explicación! Mi pensamiento estaba en línea con su explicación y ese artículo técnico (+1 de votación) lo confirmó en gran medida. Sí, me refiero a suspendido no a fondo. FYI: El motivo por el cual mi transmisor TCP se colgó rápidamente porque constantemente enviaba flujo de datos al receptor. – user523234
Eso tendría sentido: si envía datos que el destino no recibe y lo hace con una llamada de bloqueo en el hilo principal, iOS verá que su aplicación no responde y la matará. La conexión TCP podría estar bien; tiene control de flujo para administrar búferes, pero no está permitido bloquear el hilo principal por mucho tiempo. – smparkes