首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blackberry秒表实现

Blackberry秒表实现
EN

Stack Overflow用户
提问于 2010-03-09 07:24:31
回答 1查看 644关注 0票数 2

我正在尝试写一个黑莓应用程序,基本上是一个秒表,并显示一圈的时间。首先,我不确定我是否以最理想的方式实现了秒表功能。我有一个时钟(_myLabel),它显示‘LabelField’--从00:00开始。然后点击start按钮,_myLabel字段每秒都会更新为自上次更新以来经过的秒数(应该只会递增1,但有时会有延迟,它会跳过一个数字)。我只是想不出一种不同的方法--而且我对GUI开发和线程是个新手,所以我想这就是为什么。

编辑:下面是秒表的名称:

代码语言:javascript
复制
_timer = new Timer();
_timer.schedule(new MyTimerTask(), 250, 250);  

下面是TimerTask:

代码语言:javascript
复制
class MyTimerTask extends TimerTask {
long currentTime;
long startTime = System.currentTimeMillis();

public void run() {
synchronized (Application.getEventLock()) {
currentTime = System.currentTimeMillis();
long diff = currentTime - startTime;
long min = diff / 60000;
long sec = (diff % 60000) / 1000;
String minStr = new Long(min).toString();
String secStr = new Long(sec).toString();

if (min < 10)
 minStr = "0" + minStr;
if (sec < 10)
 secStr = "0" + secStr;

 _myLabel.setText(minStr + ":" + secStr);  
timerDisplay.deleteAll();
timerDisplay.add(_timerLabel);
 }
 }
}

无论如何,当你停止秒表时,它会更新一个记录圈速数据的历史表。当这个列表变长时,计时器开始降级。如果你尝试滚动,结果会变得很糟糕。

有没有更好的方法来实现我的秒表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-09 15:57:05

以下是一些小贴士:

  • 跟踪用于更新标签的最后一个"sec“值,如果新计算的"sec”值相同,则立即退出运行循环-否则,您不必要地使用相同的值刷新UI,这会减慢一切运行循环中的同步,只需将修改UI (setText调用)的代码放入UiApplication.getUiApplication.invokeLater()调用中(使用匿名Runnable)
  • don't删除,然后从屏幕或label中重新添加标签,您只需要调用setText(),它应该更新-如果它不更新,则在字段上调用invalidate(),它将被重新绘制
  • 现在您已经优化了您的代码并最小化了实际UI绘制的数量,可以安全地将timertask间隔设置为一个较小的值,例如50ms,这样您就可以有一个更平滑的计时器更新

在创建快速UI时,需要记住的最重要的一点是,只在需要时更新UI,并且只更新需要更改的字段。如果你调用像deleteAll()这样的方法,你最终会得到整个屏幕或者管理器的刷新,这真的非常慢。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2405569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档