Android – CountDownTimer in ListView lampeggia casualmente

Sto facendo listview con i timer, ciascuno con scadenza diversa a seconda del database (simile all'asta)

Time now = new Time(); now.setToNow(); now.normalize(true); nowMillis = now.toMillis(true); . . String endtime = a.get(position).get(TAG_ENDTIME); Integer timeSecond = Integer.parseInt(endtime.substring(17, 19)); Integer timeMinute = Integer.parseInt(endtime.substring(14, 16)); Integer timeHour = Integer.parseInt(endtime.substring(11, 13)); Integer timeDay = Integer.parseInt(endtime.substring(0, 2)); Integer timeMonth = Integer.parseInt(endtime.substring(3, 5)) - 1; Integer timeYear = Integer.parseInt(endtime.substring(6, 10)); Time future = new Time(); future.set(timeSecond, timeMinute, timeHour, timeDay, timeMonth, timeYear); future.normalize(true); long futureMillis = future.toMillis(true); long interval = futureMillis - nowMillis; new CountDownTimer(interval,1000) { @Override public void onTick(long millisUntilFinished) { Long interval = millisUntilFinished; int days = (int) ((millisUntilFinished / 1000) / 86400); int hours = (int) (((millisUntilFinished / 1000) - (days * 86400)) / 3600); int minutes = (int) (((millisUntilFinished / 1000) - (days * 86400) - (hours * 3600)) / 60); int seconds = (int) ((millisUntilFinished / 1000) % 60); String countdown = String.format("%dd %dh %dm %ds", days, hours, minutes, seconds); holder.duration.setText(countdown); } @Override public void onFinish() { // TODO Auto-generated method stub holder.duration.setText(TimeUp); } }.start(); 

Quel codice funziona quasi perfettamente quando esiste una sola istanza.

  • Imansible avviare questo animatore in una vista indipendente! rivelano l'effetto
  • Problemi con la logging dei miei dati con crashlytics
  • Applicazione nativa Android di Android non funziona sul dispositivo effettivo
  • requestDisallowInterceptTouchEvent non funziona se non seleziona prima la vista
  • Comandi di shell Adb per modificare le impostazioni o eseguire attività su un telefono
  • Android: get / recuperare l'ID del titolo progressDialog e l'ID del titolo DialegError
  • Tuttavia il problema si presenta quando esiste più istanze, attorno a 4-5 timer che funzionano allo stesso tempo

    Diversi / tutti i countdown inizieranno a lampeggiare, sia esso secondi, minuti, ore o giorni.

    ad esempio uno dei miei temporizzatori intermittenti tra 27d 11h 54m 50s e 0d 23h 47m 0s

    Poiché questo si verifica sia sull'emulatore che sul mio dispositivo, sembra essere il difetto del mio codice, ma non ho un'idea di ciò che potrebbe causare questo.

    Ho provato a cambiare

    holder.duration.setText(countdown) in holder.duration.setText(millisUntilFinished)

    e il conto alla rovescia lampeggia tra la durata desiderata e un numero enorme e random,

    Per favore aiuto.

  • Come impostare la dimensione disegnata nell'elenco dei livelli
  • OnAnimationEnd non viene chiamato, onAnimationStart funziona bene
  • Class di Android AudioRecord - inizia rapidamente l'audio mic del live, impostare la function di richiamata
  • Android 2.1: Muliple Handlers in un'unica attività
  • Integrare / incorporare flash in applicazioni Android? Possibile?
  • Come cambiare il colore del button quando si fa clic e si torna al colore predefinito nel clic successivo?
  • One Solution collect form web for “Android – CountDownTimer in ListView lampeggia casualmente”

    Dovresti utilizzare un TimerTask e mettere tutti gli aggiornamenti dell'interface utente in quel singolo timer invece di eseguire più CountDownTimer s per essenzialmente lo stesso lavoro poiché stai già facendo tutta la math per determinare quando "il tempo è in su" per un determinato elemento eseguire una TimerTask e una volta al secondo è necessario aggiornare tutto. CountDownTimer è utile per un conto singolo di implementazione perché fa parte di una math integrata, ecc. Stai ridimensionando tutta quella math, in modo da poter utilizzare un'istanza di una TimerTask regolare.

    L'implementazione di relais di CountDownTimer sui ritardi programmati nella messaggistica di Handler. È probabile che un'unica istanza di conto alla rovescia non comporti alcun comportmento bizzarro, ma se si hanno diversi routes che tutti dovrebbero "tick" quando l'orologio di sistema colpisce each secondo (il tempo in millis termina in "000" – una volta al secondo e tutti allo stesso tempo), allora quei gestori cercheranno di sparare simultaneamente e inevitabilmente fallire.

    Se l'interface utente o altro process probabilmente ritarderà alcuni di questi messaggi, fino al punto in cui "salta le zecche" per recuperare. Inoltre, questo significa che il ritardo del messaggio successivo potrebbe essere solo millisecondi dalla successiva ticchettata (cioè se dovrebbe essere controllato each 1000 millis, ma viene ritardato un ulteriore millesimo 1990, poi salterà un segno di spunta e pianifica anche il prossimo messaggio per 10 millis in futuro.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.