Un po 'di contesto primaiOS thread in background rallentare quando interfaccia utente è inattivo
Ho un app Xamarin che essenzialmente flussi video da un server remoto. Ho un thread in background che loop come questo (pseudo-codice):
private void UpdateMethod()
{
while (running)
{
bool success = WaitForUpdate();
if (!success)
{
break;
}
Update update = GetUpdate();
SendUpdateToConcurentQueue(update);
}
Disconnect();
}
avvio il thread in background in questo modo:
Thread thread = new Thread(UpdateMethod);
thread.IsBackground = true;
thread.Start();
La questione
Quando avvio il flusso , tutto è perfetto. È solo dopo ~ 10 secondi di non interazione con il dispositivo che diventa molto lento. Ho emesso il numero di aggiornamenti dal thread in background e sembrano molto più lenti. Di solito ottengo circa 2-6 aggiornamenti da elaborare per aggiornamento (60fps). Quando è super lento, ottengo un ciclo di aggiornamento pari a 6.
Una cosa che mi imbarazza: quando apro il menu della barra superiore di iOS, gli aggiornamenti vengono ripristinati e il flusso torna improvvisamente alla velocità normale. Il rateo di aggiornamento aumenta di ~ 10 secondi e torna ad essere in ritardo come un matto.
Quello che ho provato
ho cercato di iniziare una coda di spedizione solo con questo in esso, come questo:
DispatchQueue queue = new DispatchQueue("updateQueue");
queue.DispatchAsync(this.UpdateProcess);
Non sembrava per aiutare a tutti.
Ho anche provato a cambiare la proprietà QualityOfService nel mio thread di aggiornamento in questo modo:
NSThread.Current.QualityOfService = NSQualityOfService.UserInitiated
non funziona neanche! Mi sembra che iOS abbia abbassato la priorità del mio thread per qualche ragione. Se inserisco un breakpoint nel mio metodo UpdateMethod
, viene colpito quando l'app non è in ritardo. Ma quando c'è ritardo, il punto di interruzione non viene colpito. Ora questo mi imbarazza davvero, dal momento che il codice funziona ancora! Continuo a ricevere gli aggiornamenti, è solo il modo più lento ...
Modifica: Ho provato a utilizzare Strumenti e ho scoperto che la rete viene limitata ... Indagare, ma se qualcuno ha conoscenza di qualsiasi tipo di acceleratore di rete su iOS, fammi sapere.
Sono piuttosto sicuro che ho provato anche questo ... Ma io darò un altro tentativo. Sembra che questo sia per l'oscuramento dello schermo, che non sembra accadere solo dopo 10 secondi. –
L'ho appena provato ... ancora in ritardo :( –
Ho modificato la mia domanda: sembra che la rete sia a regime! Molto strano ... –