Autore Topic: CountDownTimer non funziona correttamente  (Letto 347 volte)

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
CountDownTimer non funziona correttamente
« il: 15 Luglio 2013, 17:46:03 CEST »
0
Ciao a tutti, non è la prima volta che uso l'oggetto CountDownTimer ma ultimamente ho avuto dei problemi in una classe. Sto usando un timer per caricare un'animazione. Lo faccio tramite un timer perché ogni volta che una bitmap è stata usata, la riciclo subito e libero la memoria. Ho provato ad usare la classica animazione in un file xml, ma l'applicazione crasha spesso. Il mio problema è che il timer dovrebbe andare a chiamare il suo metodo onFinish() solo quando il tempo è finito, mentre richiama onThick() a seconda dell'intervallo che ho scelto. Ho notato che a volta funziona, a volte invece chiama due volte il metodo onThick() e poi va subito nell'onFinish(). Oppure chiama solo una volta onThick() e poi va in onFinish(). Altre volte invece funziona correttamente. Il dubbio che mi è venuto è il seguente: dato che faccio partire l'animazione nel metodo onCreate grazie ad una Handler
Codice (Java): [Seleziona]
Message m=new Message();
                        m.obj="playstars";
                        bonudHandler.sendMessageDelayed(m, 70);

il timer inizia a contare e nel momento in cui la mia activity è visibile, il counter si trova già alla fine, o quasi, e quindi il processo non viene eseguito cottettamente. Questo è il mio timer:
Codice (Java): [Seleziona]
        private void animateStar()
        {
               
                spinview_wheelstar.setVisibility(View.VISIBLE);
                //1° parameter total time, 2° parameter time each interval
        CountDownTimer cdt=     new CountDownTimer(1950,150)
                {
                        @Override
                        public void onTick(long msec)
                        {      
                                switchRecicle();
                                counter++;
                                Log.d("ON THICK","OK");
                        }
                       
                        @Override
                        public void onFinish()
                        {
                                Log.d("ON FINISH","OK");
                                if(spinview_wheelstar.isShown())
                                spinview_wheelstar.setVisibility(View.GONE);
                               
                                if(drawableFirst!=null)
                                        if(drawableFirst.getBitmap()!=null && !drawableFirst.getBitmap().isRecycled() )
                                                drawableFirst.getBitmap().recycle();
                               
                                if(drawableSecond!=null)
                                        if(drawableSecond.getBitmap()!=null  && !drawableSecond.getBitmap().isRecycled() )
                                                drawableSecond.getBitmap().recycle();
                               
                                System.gc();
                        }
                       
                };
                 cdt.start();
il metodo switchRecicle mi permette di caricare una bitmap su un ImageView e reciclare quella precedente. Qualche idea? Grazie