我有一个自定义视图,其中包含多个视图。我已经做到这一点,当点击这个容器视图中的一个视图时,它将运行一个“计时器”线程,它需要每秒更新一个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)
对我来说也是不切实际的。那么有人能告诉我如何做到这一点吗?如果有人需要澄清,请告诉我!
答案 0 :(得分:0)
你通过整个活动是什么意思? 您可以通过在此线程内创建一个计时器线程来实现它,只要您想要更新UI(如1秒后)调用 runOnUIThread()。
答案 1 :(得分:0)
您想要使用Android AsyncTask。它是一种Android特定的构造,仅用于此类周期性GUI更新,同时等待某些事情完成。
在doInBackground中执行计时器,并在需要更新GUI时调用publishProgress。然后在onProgressUpdate中更新GUI。 onProgressUpdate在GUI线程上运行,doInBackground自动在后台线程上运行。