Quali sono i vantaggi/svantaggi nell'inserire un codice di accesso di 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.Thread di applicazioni vs thread di servizio
risposta
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à è terminata è 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 usare un Servizio, ma avrai comunque bisogno di un thread (o di un AsyncTask) per bloccare le attività.
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 ad essere invocate :(
L'unica differenza potrebbe essere che il servizio può essere distrutta senza distruggere completamente l'applicazione - in tal modo potenzialmente distruggere le nuove discussioni perché potenzialmente perché sul lato pratico, questo non accade l'applicazione SEMPRE viene ucciso senza uccidere il servizio prima che, il che significa:.?. il meccanismo di servizio locale è inutile !! !
Il servizio remoto è una discussione diversa: mi riferivo solo a "dove dovrei eseguire un nuovo thread?".
Buona fortuna !!!
Puoi fornire una situazione in cui dovresti eseguire un nuovo thread in un servizio anziché eseguire semplicemente un nuovo thread in un'attività per eseguire la stessa attività? – committedandroider
@committedandroider Di ', hai un'app browser e l'utente seleziona per scaricare un file da 1 GB. L'utente non manterrà aperta l'app del browser e attenderà il download del file. Avvierà semplicemente il download e uscirà dall'app.In questo caso, se il thread generato da Activity non verrà più eseguito, sarà quindi necessario generare un thread dal servizio. – CopsOnRoad
@Jack sì che ha senso. questo è stato tanto tempo fa lol – committedandroider
- 1. Differenza tra thread di generazione di applicazioni Android vs Servizio?
- 2. Thread di sfondo vs thread dell'interfaccia utente
- 3. Delegati asincroni vs thread
- 4. Thread vs. Async
- 5. BackgroundWorker vs background Thread
- 6. Async/Await vs Thread
- 7. Greenlet vs. Thread
- 8. PThread vs boost :: thread?
- 9. Handler vs Thread
- 10. Calcolo distribuito vs thread
- 11. Thread vs Core
- 12. Qt: thread UI di aggiornamento thread di thread
- 13. Cosa c'è di meglio: selezionare vs thread?
- 14. Core CUDA vs conteggio thread
- 15. indipendente vs. assemblabili thread POSIX
- 16. thread vs. process in Python
- 17. thread vs. pthread in perl
- 18. Uso di creazione di un thread estendendo una classe Thread
- 19. Creazione di una libreria C thread-thread
- 20. Prioritizzazione di thread all'interno dei thread
- 21. Arresto di un thread all'interno di un servizio
- 22. Thread sleep e thread join
- 23. Database pooling pooling con servizio multi-thread
- 24. Thread e Thread Start
- 25. Thread di dati di base thread NSManagedObjectContext errore di unione
- 26. 500 thread di lavoro, che tipo di pool di thread?
- 27. Numero massimo di thread
- 28. Prestazioni di multithreading di QtConcurrent Vs QThread con più thread
- 29. Come implementare un servizio di raccolta thread-safe?
- 30. perché dovrei usare il servizio Android invece di java thread
Grazie, è quello che pensavo. Su un argomento correlato, almeno nell'emulatore, dopo aver avviato lo streaming player, continuerebbe a giocare anche dopo aver premuto il pulsante Indietro. Supponevo che si fermasse quando l'attività non era più in primo piano ... è a causa del nuovo thread o giocherà indipendentemente finché Android non uccide l'applicazione. – zerayaqob
Sì, il thread rimarrà in esecuzione fino a quando Android non lo uccide. Se vuoi che si fermi, implementa una sorta di flag "attivo" e impostalo su false nel tuo metodo onDestroy(). – synic
Si noti inoltre che i thread in un 'Activity' vengono distrutti quando la configurazione (leggi: orientamento) cambia! Questo non è vero per i thread in 'Service' s. – MrSnowflake