Autore Topic: Multithreading  (Letto 569 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Multithreading
« il: 21 Luglio 2017, 14:42:40 CEST »
0
Ci sono dei limiti nel Multithreading?

Dal mainThread dell'activity principale, posso lanciare più AsyncTask, Service, IntentService? C'è magari qualche documento che spiega in modo esaustivo quali sono i limiti?

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Multithreading
« Risposta #1 il: 21 Luglio 2017, 18:40:29 CEST »
0
Non esiste un limite alla creazione di thread, ma la creazione di un numero eccessivo di thread può avere un impatto negativo sulle prestazioni: ecco perché in Java esiste una classe come ExecutorService che gestisce un pool di thread, riciclando quelli già eseguiti. Ci potrebbero poi essere problemi di race condition se i vari thread accedono agli stessi dati.

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Multithreading
« Risposta #2 il: 24 Luglio 2017, 09:42:10 CEST »
0
Ok, per quanto riguarda un AsyncTask con THREAD_POOL_EXECUTOR è possibile lanciare più AsyncTask contemporaneamente. Di default eseguirebbe un solo AsyncTask, ma cambiando il lancio ho visto che possono essere lanciati più contemporaneamente.

Per quanto riguarda l'IntentService invece da quanto ho capito, se si lancia sempre lo stesso, viene creata una queue, solo alla fine del primo viene eseguito il secondo e così via.

Codice: [Seleziona]
Intent intent1 = new Intent(this, myIntentService.class);
Intent intent2 = new Intent(this, myIntentService.class);
Intent intent3 = new Intent(this, myIntentService.class);
startService(intent1);
startService(intent2);
startService(intent3);

Se invece vengono lanciati intentService diversi questi possono essere eseguiti senza fare una coda:

Codice: [Seleziona]
Intent intent1 = new Intent(this, myIntentService1.class);
Intent intent2 = new Intent(this, myIntentService2.class);
Intent intent3 = new Intent(this, myIntentService3.class);
startService(intent1);
startService(intent2);
startService(intent3);

Mi confermi per quanto riguarda l'IntentService?

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Multithreading
« Risposta #3 il: 24 Luglio 2017, 11:19:31 CEST »
0
Sì,è così.