Android学习笔记(11)-开始做一个数独游戏[下]

本文探讨了在Android应用中使用定时器遇到的问题及解决方案。作者尝试使用java.util.Timer但发现无法直接更新UI,最终通过创建Handler实现了定时更新界面的需求。
继续,最后再讨论一下定时器的实现。

本来很简单的一件事,直接用java.util.timer应该就够用了,但是发现在它的task中无法去invalidate我们的MainView,很郁闷。这一点的处理说明 Android还是相对线程安全的。

折腾良久,明白了非得再做一个Handler,才能在线程中操作界面元素。所以,代码比brew复杂了一点。

先还是用Timer和TimerTask来做,如下:
publicTimerHandlertimerHandler;
publicTimertimer;
publicMyTimerTasktask;

......

timer
=newTimer(true);
task
=newMyTimerTask(this);

......
那个MyTimerTask是MainActivity的一个内嵌类,实现如下:
privateclassMyTimerTaskextendsTimerTask
...{
privateMainActivityme;
privateinta=0;

publicMyTimerTask(MainActivityp)...{
me
=p;
}

publicvoidrun()...{
me.gridView.time
++;
Log.d(
"MyTask",Integer.toString(me.gridView.time));

timerHandler.sendEmptyMessage(
0);
}

}
这里做两件事,一是将gridView中的time加一,二是发送一个消息通知timerHandler。原来我在这里直接让MainView去刷新屏幕,发现不行,所以就改成这样处理了。
然后就是如何实现TimerHandler类的,也不复杂,就是让它去刷新一下屏幕即可。
publicclassTimerHandlerextendsHandler...{

privateMainViewme;
publicTimerHandler(MainViewm)...{
me
=m;
}


@Override
publicvoidhandleMessage(Messagemsg)...{
Log.d(
"Ti",msg.toString());
me.invalidate();
}


}

如此一来,就顺了。
在MainView中的onDraw,根据当前的time值显示成00:00:00的格式即可。

另外,发现Android的模拟器运算速度不如BREW的模拟器,相当的慢。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值