从视图在UI线程上运行

时间:2011-08-02 04:33:59

标签: android multithreading view runnable ui-thread

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您想要使用Android AsyncTask。它是一种Android特定的构造,仅用于此类周期性GUI更新,同时等待某些事情完成。

在doInBackground中执行计时器,并在需要更新GUI时调用publishProgress。然后在onProgressUpdate中更新GUI。 onProgressUpdate在GUI线程上运行,doInBackground自动在后台线程上运行。