【发布时间】:2014-11-06 02:57:18
【问题描述】:
我需要每 200 毫秒完成一次工作,并且我需要它平滑且均匀。要做的任务是中等权重(在这两种情况下,问题 1 和 2)。
从社区中搜索计时器看起来最好的解决方案是使用处理程序、runnable 和 postDelayed(),(How to set timer in android?)。
更新问题:
-如果我必须与 UI 交互,postDelayed() 或 schedule()/scheduleAtFixedRate(),哪种方式最精确、最快速?
-如果我不必与 UI 交互,postDelayed() 或 schedule()/scheduleAtFixedRate(),哪种方式最精确和快速?
-两种方式都可以在主进程上执行还是在单独的进程上执行?怎么样?
这样我就有了主类本地对象,但它是一个新线程吗?这是一个好习惯吗?
timer.schedule( new TimerTask() {
@Override
public void run() {
textview.setText(str);
//other stuff
}
}, 0, 200);
接下来是另外一个有schedule的,任务是在一个单独的任务中,不是定时器本身,我猜,而且我不能直接和UI交互,我猜...
timer.schedule( new aclass(), 0, 200);
处理方式(来自 Dave.B):
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
TextView.setText(str);
// other stuff
timerHandler.postDelayed(this, 500); }
};
@Override
public void onCreate(Bundle savedInstanceState) {
...
timerHandler.postDelayed(timerRunnable, 0);
}
【问题讨论】:
-
如果你想在主线程上完成工作,使用带有
postDelayed()的处理程序。否则,您将浪费更多时间将事件发布回主线程。 -
计时器很快,所以我想我需要一个新线程,但我必须与 UI 交互
-
最后我认为在一个单独的“帮助器”类中使用处理程序(第三个示例)。这应该把所有事情都放在另一个线程上,对吗?
-
@Alex MDC.but 我必须制作另一个类似的应用程序,它也与 UI 交互。你说如果我在单独的类上运行它可能会更慢?