Android 倒计时如何访问OnTick方法中的UI?

Android 倒计时如何访问OnTick方法中的UI?,android,layout,countdowntimer,Android,Layout,Countdowntimer,CountDownTimer是如何访问onTick方法中的UI的 (new CountDownTimer(10000,1000){ @Override public void onFinish() { // TODO Auto-generated method stub } @Override public void onTick(long millisUntilFinished) { TextView tv = (T

CountDownTimer
是如何访问
onTick
方法中的UI的

(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();

您可以通过线程访问UI,也可以通过
CountDownTimer
为此目的使用
Handler


阅读了解如何使用所有这些方法。

从@Sergey Glotov给出的答案中的links()可以看出,倒计时计时器根本不使用单独的线程。这就是您能够访问所有UI元素的原因。我不知道他们为什么要用处理器。但它不会产生新的线程。它在UI线程本身上运行。

CountDownTimer
没有任何机制在onTick方法中访问UI。 更重要的是,从源代码中,您可以看到它在内部使用了在对象创建时使用的处理程序。因此它在创建计时器的线程上运行。


这个问题是不适定的,在您的情况下,我认为您可以访问这些视图,因为您可能在活动上创建了
倒计时
作为匿名类。如果你够幸运的话,这是在UI线程上完成的。

你说的“如何”是什么意思?这是一个匿名的内部类,它可以访问活动字段。我想从线程访问UI,但我找不到&我找到了CountDownTimer类,它很容易访问onTick方法中的UI元素。它是倒计时(我认为使用线程)并且很容易访问UI。我想知道如何…就像@damluar所说的,它是一个匿名的内部类:它可以访问所有活动字段和方法(因此
findviewbyd
工作)。它的工作方式与AsyncTask相同,只有一个方法可以在UI线程中执行。它工作正常…你有什么问题???我看到了你的链接。在阅读了它们之后,我知道倒计时计时器使用了一个处理程序,但不会产生一个新线程。这意味着倒计时不会在单独的线程中发生。那为什么要使用处理器呢?handler的作用是充当线程和Ui线程之间的媒介。文章链接已断开。@Nima谢谢。修复了它。@Ashwin,处理程序的目的不是充当线程和UI线程之间的媒介,目的之一是在与当前线程不同的线程上执行代码。CurnDeTrimeTo不一定使用UI线程,阅读我的答案以更好地解释。然而,文档并没有对此进行任何说明,因此我认为依赖于实现细节和危险。AsyncTask显式调用在UI线程上运行的函数,因此,如果没有说明我将对冲赌注,只使用runOnUiThread()。