Autore Topic: Intent e Thread  (Letto 940 volte)

Offline Nicolò

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Intent e Thread
« il: 19 Aprile 2011, 16:40:44 CEST »
0
Lo sapevate che un Thread si blocca nel momento in cui nel suo run viene lanciato un intent???Come posso fare per non farlo stoppare???

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Intent e Thread
« Risposta #1 il: 19 Aprile 2011, 17:02:48 CEST »
0
Lo sapevate che un Thread si blocca nel momento in cui nel suo run viene lanciato un intent???Come posso fare per non farlo stoppare???

Cosa ti ha fatto giungere a tale conclusione?

Puoi mostrare il source del thread e un logcat dove risulta evidente lo stop del thread?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicolò

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:Intent e Thread
« Risposta #2 il: 19 Aprile 2011, 17:12:47 CEST »
0
Eh...sono 1000 Righe di codice, cmq per intenderci: Supponi di mettere all'interno di un thread la registrazione di un broadcast receiver che aspetta l'accensione dell'antenna wifi. Supponi inoltre di mettere sul broadcast receiver un Thread.sleep(5000). Teoricamente, quando si accende l'antenna wifi e il broadcast receiver cattura l'intent, si dovrebbero aspettare 5 secondi per effettuare una qualunque operazione e nel frattempo non si dovrebbe bloccare nulla, eppure si blocca tutto, questo significa che il thread si è stoppato! Considera che al momento della registrazione del receiver, parte subito un intent anche se l'antenna non si è ancora accesa (questo non ho capito bene perchè) quindi è li che mi si stoppa il thread!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Intent e Thread
« Risposta #3 il: 19 Aprile 2011, 17:33:44 CEST »
0
Sono un po' confuso, ma forse sono io che non ho ben compreso la questione (senza vedere nessuna riga di codice, mi sembra di esser cieco). Comunque, tanto vale buttare là qualche osservazione.

Non ho capito prima di tutto come stai legando il broadcast receiver e il thread.

Che io sappia, se usi registerReceiver, il BroadcastReceiver riceve sempre e comunque nel main thread e non nel thread secondario. Puoi però far partire un AsyncTask/thread secondario dal broadcastreceiver stesso.


Per fare debugging e tenere traccia di dove passa l'esecuzione, anche nel thread secondario, ti consiglio di usare estensivamente Log.d()
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicolò

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:Intent e Thread
« Risposta #4 il: 19 Aprile 2011, 17:43:22 CEST »
0
Quindi mi hai già dato la risposta!!! Dato che il receiver riceve nel Thread Primario, ovvero il main thread, mi sembra ovvio che nel caso in cui, durante l'esecuzione di un nuovo Thread, aspettassi l'accensione dell'antenna wifi, il solo aspettare mi farebbe bloccare il thread secondario, perchè è come se finisse il suo lavoro, quindi ciò che verrà fatto successivamente all'interno del receiver non fa piu parte del Thread secondario ed è proprio per questo che si blocca tutto se metto un Thread.sleep!
Illuminami, cosa fa il log.d??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intent e Thread
« Risposta #5 il: 19 Aprile 2011, 22:23:27 CEST »
0
Eh...sono 1000 Righe di codice, cmq per intenderci: Supponi di mettere all'interno di un thread la registrazione di un broadcast receiver che aspetta l'accensione dell'antenna wifi. Supponi inoltre di mettere sul broadcast receiver un Thread.sleep(5000). Teoricamente, quando si accende l'antenna wifi e il broadcast receiver cattura l'intent, si dovrebbero aspettare 5 secondi per effettuare una qualunque operazione e nel frattempo non si dovrebbe bloccare nulla, eppure si blocca tutto, questo significa che il thread si è stoppato! Considera che al momento della registrazione del receiver, parte subito un intent anche se l'antenna non si è ancora accesa (questo non ho capito bene perchè) quindi è li che mi si stoppa il thread!

Non mi sembra una buona soluzione la tua.
Devi partire dal presupposto che un broadcast receiver non deve fare altro che ricevere un intent e reagire ad esempio mostrando una notifica o avviando un service che possa maneggiare l'evento. Quindi nel tuo caso dovresti far partire un service e utilizzare ad esempio un handler per schedulare l'esecuzione posticipata del tuo codice.

Illuminami, cosa fa il log.d??

Questa domanda ti costa un -10 nella tua reputazione :D

Offline Nicolò

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:Intent e Thread
« Risposta #6 il: 20 Aprile 2011, 22:20:39 CEST »
0
Si immagino, anche se ho scritto molte righe di codice, non è da molto che utilizzo android quindi non so tutto!! Vabbè dai..mi farò perdonare!! O:-)