Domanda

Come CountDownTimer sta accedendo all'interfaccia utente all'interno onTick metodo?

(new CountDownTimer(10000,1000){

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTick(long millisUntilFinished) {
        TextView tv = (TextView)findViewById(R.id.tvLCD);
        tv.setText(Long.toString(millisUntilFinished));
    }           
}).start();
È stato utile?

Soluzione

Puoi ottenere l'accesso all'interfaccia utente da thread da Activity.runOnUiTread(), View.post(), View.postDelayed() o via Handler. CountDownTimer usi Handler per questo scopo (fonte).

Leggi Questo articolo Per capire come usare tutti questi metodi.

Altri suggerimenti

Dai collegamenti ( Grecode - Gestore ) Nella risposta data da @Sergey Glotov, è chiaro che Il timer del conto alla rovescia non usa un thread separato affatto. Questo è il motivo per cui puoi accedere a tutti gli elementi dell'interfaccia utente. Non so perché abbiano usato un gestore. Ma non genera un nuovo thread. Funziona sul thread dell'interfaccia utente stesso.

CountDownTimer Non ha alcun meccanismo per accedere all'interfaccia utente all'interno del metodo ONTICK. Ancora più importante, dal codice sorgente, puoi vedere che internamente utilizza un gestore che viene preso alla creazione di oggetti. Così Funziona sul thread in cui è stato creato il timer.

La domanda è mal riposta, nel tuo caso suppongo che tu possa accedere a tali opinioni perché probabilmente crei il CountDownTimer come classe anonima su un'attività. E se hai avuto la fortuna, è stato fatto sul thread dell'interfaccia utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top