1

我有一个自定义视图,它本身包含多个视图。我已经做到了,当单击此容器视图中的一个视图时,它将运行一个“计时器”线程,该线程需要每秒更新一个 TextView,也在容器视图内。当我想每秒更新 TextView 时,就会出现我的问题。显然,这并不像我想象的那么容易。我像这样在我的容器视图中实现了 Runnable ,并在单击按钮以启动计时器时执行了线程:

public void run() {
        while(runnning) {
            // if one second has passed, update the Textview
        }
}

我得到了典型的 cannot-touch-views-outside-hierarchy 异常,这基本上意味着它没有在 UI 线程上运行。我不想在post(Runnable)这里使用,因为我不想一直等到线程结束才更新一秒钟。将它所在的整个 Activity 传递给自己运行对我来说也是不切实际的runOnUiThread(Runnable)。那么有人可以告诉我如何去做这件事吗?如果有人需要澄清,请告诉我!

4

2 回答 2

0

通过整个活动是什么意思?每当您想更新 UI(例如 1 秒后)调用 runOnUIThread() 时,您可以通过在此线程内创建一个计时器线程来实现它。

于 2011-08-02T04:40:03.460 回答
0

您想使用 Android AsyncTask。它是一个特定于 Android 的结构,仅用于在等待完成时进行此类定期 GUI 更新。

在 doInBackground 中执行您的计时器,并在您希望它更新 GUI 时让它调用 publishProgress。然后在 onProgressUpdate 中更新 GUI。onProgressUpdate 在 GUI 线程上运行,doInBackground 自动在后台线程上运行。

于 2011-08-02T04:43:55.437 回答