CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: megthebest con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: megthebest con ben 18 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 31 Thanks ricevuti nell'ultimo mese

Pagina 1 di 2 12 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 12
Discussione:

CountDown in un thread a "loop infinito"

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano L'avatar di robyrocker89


    Registrato dal
    Dec 2009
    Messaggi
    53

    Ringraziamenti
    0
    Ringraziato 4 volte in 2 Posts
    Predefinito

    CountDown in un thread a "loop infinito"

    Ciao a tutti,
    viste le mie scarse conoscenze in java sto cercando di risolvere un enigma da un paio di giorni senza alcun risultato...
    Il mio intento è quello di eseguire un countdown all interno di un thread e farlo ripartire ogni volta che il timer arriva a 0...

    vi allego il codice:

    codice:
    public class Login extends Activity
    {
        /** Called when the activity is first created. */
    	private int time_total=5000;
    	private int time_tick=1000;
    	private TimerCountDown counter;
    	private Thread time;
    	
    	@Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);
            
            counter = new TimerCountDown(time_total,time_tick);
            
            time=new Thread(new Runnable() 
    		{
    		    public void run() 
    		    {
    		    	counter.start();
    		    }
    		});
            time.start();
          }
    
    
    public class TimerCountDown extends CountDownTimer
    {
    	public TimerCountDown(long millisInFuture, long countDownInterval) 
    	{
    		super(millisInFuture, countDownInterval);
    	}
    		 
    		@Override
    		public void onFinish() 
    		{
    			Toast err_http = Toast.makeText(Login.this, "Finito!!", Toast.LENGTH_LONG);
        	                err_http.show();
    		}
    		 
    		@Override
    		public void onTick(long millisUntilFinished) 
    		{
    			
    			Toast err_http = Toast.makeText(Login.this, "Rimanente: " + millisUntilFinished/1000, Toast.LENGTH_LONG);
        	                err_http.show();
    
    		}
    		 
    }
    Grazie in anticipo!!!

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito



    L'ho scritto ora nel browser quindi perdonami se è sbagliato, cmq in linea di massima dovrebbe essere giusto.

    Una alternativa sarebbe di usare handler.postDelayed()
    Ultima modifica di eafkuor; 10-10-10 alle 17:27

  4. #3
    Androidiano L'avatar di robyrocker89


    Registrato dal
    Dec 2009
    Messaggi
    53

    Ringraziamenti
    0
    Ringraziato 4 volte in 2 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    L'ho scritto ora nel browser quindi perdonami se è sbagliato, cmq in linea di massima dovrebbe essere giusto.

    Una alternativa sarebbe di usare handler.postDelayed()
    Ti ringrazio!!! funziona alla perfezione!!!
    un ultima cosa: questo thread gira "sopra" a google maps ed ogni 5 secondi esegue una query...il problema è che quando esegue la query c'è un rallentamento di google maps (va un po' a scatti per un paio di secondi)...dici che mettendo la visualizzazione della mappa in un nuovo thread risolverei il problema?

    Grazie ancora!!

  5. #4
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Io non so quanto convenga creare un altro Thread.
    Perché non provi ad usare un handler?

  6. #5
    Androidiano L'avatar di robyrocker89


    Registrato dal
    Dec 2009
    Messaggi
    53

    Ringraziamenti
    0
    Ringraziato 4 volte in 2 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    Io non so quanto convenga creare un altro Thread.
    Perché non provi ad usare un handler?
    Ciao,
    scusa ma ho letto solo ora la risposta!

    un handler? potresti cortesemente farmi un esempio di come impostarlo?
    che vantaggi avrei rispetto al thread?

    ti ringrazio ancora!!

    ps: il codice da te postato va che è una meraviglia...peccato che ogni 5 secondi (limite che ho impostato io) esegua una query e la mappa si pianti per un paio di secondi...è risolvibile questo secondo te?

  7. #6
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Si, usando appunto un Handler
    Ora sono appena tornato a casa e sto un po' distrutto, domani ti faccio un esempio.
    Cmq è molto facile, devi usare Handler.postDelayed(Runnable r, long millis), poi da dentro al runnable alla fine fai if(devo ripetere l'operazione) handler.postDelayed(this, millis)
    Meglio che ti faccio un esempio domani mi sa

  8. #7
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Dentro la classe che esegue la query innanzitutti dichiari una variabile Handler:



    poi ci metti una cosa così:



    per iniziare a fare le query:


  9. #8
    Androidiano L'avatar di robyrocker89


    Registrato dal
    Dec 2009
    Messaggi
    53

    Ringraziamenti
    0
    Ringraziato 4 volte in 2 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    Dentro la classe che esegue la query innanzitutti dichiari una variabile Handler:



    poi ci metti una cosa così:



    per iniziare a fare le query:

    mi è tutto chiaro tranne un particolare: quell if dentro al metodo run() è necessario?
    non ho ben capito il "if(devi fare un'altra query)"...

    io ho provato a impostarlo così ma dopo 2 o 3 cicli va in crash l'app:



    ovviamente poi dopo metto handler.post(update_position);
    Ultima modifica di robyrocker89; 29-10-10 alle 11:07

  10. #9
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Quell'if serve semplicemente per smettere di eseguire query fino all'infinito, immagino che prima o poi debba smettere no?
    Comunque posta il messaggio di errore che ti da!

    p.s. per svuotare la coda dei runnable da eseguire usa handler.removeCallbacks(update_position), forse è quello il problema

  11. #10
    Androidiano L'avatar di robyrocker89


    Registrato dal
    Dec 2009
    Messaggi
    53

    Ringraziamenti
    0
    Ringraziato 4 volte in 2 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    Quell'if serve semplicemente per smettere di eseguire query fino all'infinito, immagino che prima o poi debba smettere no?
    Comunque posta il messaggio di errore che ti da!

    p.s. per svuotare la coda dei runnable da eseguire usa handler.removeCallbacks(update_position), forse è quello il problema
    il fatto è proprio quello!
    ti spiego il progetto a cui sto lavorando: in pratica l'app mi visualizza la mappa di google maps...alla pressione di un pulsante l'app fa 3 cose:
    1. aggancia il satellite GPS per la rilevazione della posizione
    2. esegue una query di update (ogni 5 secondi) su un db mysql (in remoto) delle mie coordinate
    3. esegue una query di select (ogni 5 secondi) sullo stesso db mysql per prendermi le coordinate di un altro utente in base al suo username e visualizza un overlay nella posizione relativa alle coordinate prese dalla select...

    ecco...grazie a te riesco ad eseguire le 2 query in un handler (o forse meglio 2 handler?) ogni 5 secondi...il problema è che l'interfaccia grafica si pianta per troppo tempo mentre esegue le 2 query e rende parecchio frustrante l'esperienza dell utente...mi chiedevo se c'era un modo per evitare che ciò accadesse...forse un modo sarebbe utilizzare i metodi wait() ecc... ma sinceramente non avendo grande esperienza in java (e in particolare con l'uso di thread/handler) non saprei dove piazzarli...

    ti allego il codice nella speranza che tu possa darmi una mano (si lo so, sono una persona frustrante ma se ti rompo non esitare a dirmelo!! ):





    ho tagliato delle parti che non servivano a nulla per semplificare un po'...
    ho provato a fare 2 handler al posto di uno ma non cambia nulla...
    sicuramente c'è qualcosa che va sistemato in termini di "sincronizzazione" e di priorità...
    se ti va dacci un occhio...se un giorno ci incontreremo non esiterò a offrirti da bere...anzi, ti compro il bar!!!
    Ultima modifica di robyrocker89; 29-10-10 alle 10:57

Pagina 1 di 2 12 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy