Domanda Thread di applicazioni vs thread di servizio


Quali sono i vantaggi / svantaggi nell'inserire un codice di accesso alla rete lungo in una discussione in un'attività o in una discussione in un servizio? Come influenzerebbe l'applicazione? Sto scrivendo un lettore audio in streaming e da quello che ho letto fino ad ora mettendo il codice in un servizio finirà comunque per bloccare l'applicazione, quindi è necessario un nuovo thread, qualcuno sa se ha più senso inserire questo pezzo di codice in un servizio.


27
2018-04-13 21:24


origine


risposte:


Sì, un'operazione di blocco in un servizio bloccherà comunque l'applicazione. Nonostante le prime apparenze, i servizi non sono semplicemente per eseguire attività in background. Sono per l'esecuzione di attività con un ciclo di vita indipendente dal ciclo di vita dell'Attività (IE, possono continuare dopo la chiusura dell'attività).

Un servizio che inizia quando un'attività inizia e termina quando l'attività finisce è inutile.

Nel tuo caso, quando stai trasmettendo audio, potresti voler trasmettere l'audio anche dopo che l'utente ha chiuso l'attività, nel qual caso dovresti utilizzare un servizio, ma avrai comunque bisogno di un thread (o di un async) per bloccare le attività .


35
2018-04-13 21:46



Dalla mia esperienza (1+ anni di sviluppo di Android), non c'è differenza tra l'esecuzione di un nuovo thread in un servizio o un'attività. Cerca di non mantenere un riferimento all'Attività nel nuovo thread - usa il contesto dell'applicazione.

Inoltre, il ciclo di vita del servizio non ha aiutato affatto perché alcuni metodi non sono garantiti per essere invocati :(

L'unica differenza potrebbe essere che il servizio può essere distrutto senza distruggere completamente l'app, quindi potenzialmente distruggendo i nuovi thread. Perché potenzialmente? perché sul lato pratico, questo non succede L'applicazione SEMPRE viene ucciso senza uccidere il servizio prima di ciò, ovvero: il meccanismo di servizio locale è inutile!!!

Il servizio remoto è una discussione diversa: mi riferivo solo a "dove dovrei eseguire un nuovo thread?".

In bocca al lupo!!!


1
2018-03-22 14:56