Autore Topic: Activity & Thread - Bloccare ripartenza thread allo start dell'Activity  (Letto 909 volte)

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Buonasera a tutti,

sto creando un applicazione Android per un cliente. L'applicazione è quasi completata, ma mi sono accorto stasera, di un piccolo problemino tecnico.
All'apertura dell'applicazione mi parte una Activity che automaticamente fa partire un thread che si collega ad un server ogni 30 secondi.
Fin qui, non c'è nulla di preoccupante. Una volta che, però, l'utente finisce tutte le operazioni che deve effettuare, l'applicazione mi deve tornare alla pagina di partenza, ovvero a quell'activity che mi ha fatto partire il thread.

Mi sono accorto però, che nel momento in cui ritorno, automaticamente mi viene creato e startato un nuovo thread, che si va a sovrapporre all'altra creando non pochi problemi.

La mia domanda è: come posso fare a non farlo partire di nuovo? Nel senso, c'è un modo per fare un check dei thread attivi nell'applicazione ed eventualmente, qualora ci fosse un'altra istanza di quel thread, non farne startare uno nuovo?

Grazie mille

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #1 il: 25 Marzo 2011, 23:02:35 CET »
0
Quando invochi l'activity, alla fine, perchè non passi un extra all'intent, in modo da fare da filtro?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #2 il: 26 Marzo 2011, 11:22:57 CET »
0
Fai partire il thread nell'onResume()? Se sì, il thread viene richiamato ogni volta che l'Activity diventa visibile.
 Credo che il problema si risolva facendolo partire nel metodo onCreate().  ;-)

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #3 il: 26 Marzo 2011, 14:24:28 CET »
0
grazie per le risposte. In questo momento non posso fare delle prove, poichè non ho davanti a me il progetto e il portatile, ma lunedi vi farò sapere.

Per quanto riguarda il thread, esso è presente solo nell'OnCreate della activity. E dato che appena mi finisce la prima operazione, io butto giù l'activity, ogni volta che mi viene richiamata, riparte dall'onCreate.

Potrei testare il passaggio di un bundle nel riavvio della intent. In questo modo, al primo avvio, essendo vuoto, mi parte il thread. Se si tratta di un ritorno, allora è presente il bundle, e quindi non me lo deve far partire di nuovo.
Potrebbe funzionare.
Grazie mille. Lunedi mattina vi farò sapere.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #4 il: 27 Marzo 2011, 21:21:23 CEST »
0
Fai partire il thread nell'onResume()? Se sì, il thread viene richiamato ogni volta che l'Activity diventa visibile.
 Credo che il problema si risolva facendolo partire nel metodo onCreate().  ;-)

in questo modo, se per un qualunque motivo il processo viene killato, verrà richiamata la onCreate.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #5 il: 28 Marzo 2011, 14:54:34 CEST »
0
Grazie a tutti per le informazioni che mi avete inviato.

Allora, per risolvere il problema ho utilizzato un bundle fittizio che mi facesse da controllore per il thread.
La soluzione era perfetta, ma mi sono trovato alcuni problemi con la visualizzazione dell'handler ad esso associato.

Per cui, ho dovuto utilizzare una soluzione un tantinello zozza...

Ovvero, se il bundle fittizio è null, e quindi si tratta del primo avvio dell'applicazione, mi fai partire il thread tranquillamente.
Qualora invece non risultasse essere null, vuol dire che sono arrivato a quel punto facendo tutto il giro dell'applicazione, per cui, mi determino in una mappa la lista dei thread che sono presenti nell'applicazione, mi determino quale di questi è il mio thread (avendogli dato l'apposito nome), blocco quel thread (impostandogli un booleano che si trovava nel ciclo while all'interno del metodo run() del thread), ne istanzio uno nuovo e lo faccio partire...

Così facendo, ottengo un unico thread che ruota nell'applicazione e la visualizzazione dell'handler ad esso accociato...

Spero che il riassunto sia comprensivo :D

Grazie ancora a tutti!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #6 il: 28 Marzo 2011, 15:08:08 CEST »
0
Scusami.
All'onResume dell'activity, che viene invocata sempre, sia che sia killata, sia che venga rimessa in primo piano, puoi prenderti l'intent e controllare se esiste o meno l'extras "pippo".
Inizialmente non lo trovi, quindi fai partire il thread.
Successivamente, quando re-invochi la tua activity, all'intent passi questo extra, valorizzato, così da poter gestire bene la cosa.
Fare il giro che fai tu per recuperare il thread, mi sembra poco ortodosso (anche se funzionante).
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Re:Activity & Thread - Bloccare ripartenza thread allo start dell'Activity
« Risposta #7 il: 28 Marzo 2011, 15:22:15 CEST »
0
Scusami.
All'onResume dell'activity, che viene invocata sempre, sia che sia killata, sia che venga rimessa in primo piano, puoi prenderti l'intent e controllare se esiste o meno l'extras "pippo".
Inizialmente non lo trovi, quindi fai partire il thread.
Successivamente, quando re-invochi la tua activity, all'intent passi questo extra, valorizzato, così da poter gestire bene la cosa.
Fare il giro che fai tu per recuperare il thread, mi sembra poco ortodosso (anche se funzionante).

Scusami?  o_O e di che? :D Anzi... E' un piacere discutere di queste faccendo ;)
Ad ogni modo, alla mia intent, il bundle che passo, non contiene nulla. E' praticamente vuoto. Mi serve soltanto per determinarmi se sono arrivato a fine applicazione.
Per cui, non ho alcuna necessità che mi venga valorizzato qualcosa.

Il thread mi porta dei dati, che, all'atto pratico, vengono "persi" dopo la prima schermata. Ma non posso bloccarlo, poichè lo utilizzo come un controllore dello stato dell'applicazione.

Oltretutto, a fine applicazione, i dati che possedeva, non mi servono più, poichè è acqua passata...

So che la mia soluzione è poco ortodossa, e sicuramente, con un pochino di tempo in più, potrei trovare qualche soluzione più appropriata, ma al momento, mi devo arrangiare con quello che riesco a fare... Visto che ancora mi mancano molte questioni da gestire :D

Grazie ancora

Andrea