秒表计时器,最小单位为毫秒,10毫秒,则画面显示反应缓慢,该怎么解决?

ameyume
博客专家认证
2010-08-07 12:21:11
我做了一个计时器,如果按秒,100毫秒为单位计时,则时间显示的很流畅。
如果改为10毫秒为单位,在模拟器上显示也很流畅,但安装到手机里后反应就缓慢了,有延迟,时间每次不是0.01秒的显示,而是中间有很大间隔
如果改为1毫秒为单位,在模拟器上显示都不流畅了,在手机上更不行了。
该怎么解决呢?
我的实现方法为:
1.设置计时器,时间间隔mlTimerUnit根据用户的设置设置不同的值
按秒计时,则为1000
按100毫秒计时,则为100
按10毫秒计时,则为10
按1毫秒计时,则为1

			if (null == timer) {
if (null == task) {
task = new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
if (null == msg) {
msg = new Message();
} else {
msg = Message.obtain();
}
msg.what = 1;
handler.sendMessage(msg);
}

};
}

timer = new Timer(true);
timer.schedule(task, mlTimerUnit, mlTimerUnit); // set timer duration
}


2.显示计时时间的方法
        // Handle timer message
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what) {
case 1:
mlCount++;
int totalSec = 0;
int yushu = 0;

if (SETTING_SECOND_ID == settingTimerUnitFlg) {
// second
totalSec = (int)(mlCount);
} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {
// 100 millisecond
totalSec = (int)(mlCount / 10);
yushu = (int)(mlCount % 10);
} else if (SETTING_10MILLISECOND_ID == settingTimerUnitFlg) {
// 10 millisecond
totalSec = (int)(mlCount / 100);
yushu = (int)(mlCount % 100);
} else if (SETTING_MILLISECOND_ID == settingTimerUnitFlg) {
// 1 millisecond
totalSec = (int)(mlCount / 1000);
yushu = (int)(mlCount % 1000);
}

// Set time display
int min = (int)(totalSec / 60);
int sec = (int)(totalSec % 60);
try{
if (SETTING_SECOND_ID == settingTimerUnitFlg) {
// second(1000ms)
tvTime.setText(String.format("%1$02d:%2$02d", min, sec));
} else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {
// 100 millisecond
tvTime.setText(String.format("%1$02d:%2$02d:%3$d", min, sec, yushu));
} else if (SETTING_10MILLISECOND_ID == settingTimerUnitFlg) {
// 10 millisecond
tvTime.setText(String.format("%1$02d:%2$02d:%3$02d", min, sec, yushu));
} else if (SETTING_MILLISECOND_ID == settingTimerUnitFlg) {
// 1 millisecond
tvTime.setText(String.format("%1$02d:%2$02d:%3$03d", min, sec, yushu));
}
} catch(Exception e) {
tvTime.setText("" + min + ":" + sec + ":" + yushu);
e.printStackTrace();
Log.e("MyTimer onCreate", "Format string error.");
}
break;

default:
break;
}

super.handleMessage(msg);
}

};
...全文
1889 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazyluohu 2012-05-11
  • 打赏
  • 举报
回复
你好!我也是这样写了一个计时器
好像100毫秒时,时间是不准确的,设置100毫秒时的计时器要比设置1000毫秒时 慢
怎解决呢
zzw_happy 2010-08-07
  • 打赏
  • 举报
回复
100ms也太夸张了吧?一般游戏以20帧每秒来算也要50ms的精度。
我做过一个flash播放器,算法应该是比较复杂的,利用handler发消息,模拟器大约可以到30ms精度
ameyume 2010-08-07
  • 打赏
  • 举报
回复
多谢各位,那是太苛刻了,看来100ms就可以了。
yihua0001 2010-08-07
  • 打赏
  • 举报
回复
很多系统的时间片都是100ms的,1ms是比较苛刻的条件。
zzw_happy 2010-08-07
  • 打赏
  • 举报
回复
1ms太苛刻了,精度只有10几ms,
liujinrui 2010-08-07
  • 打赏
  • 举报
回复
1ms 10ms有可能一个语句就消耗掉啊。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧