首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Android >> Android 入门 >> 正文
Android学习笔记(11)-开始做一个数独游戏[下]
作者:SHARE & …    文章来源:SHARE & TOP    更新时间:2008-4-19 15:28:05
继续,最后再讨论一下定时器的实现。

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

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

先还是用Timer和TimerTask来做,如下:
Android/UploadFiles_8448/200804/20080419152818823.gif" align=top>public TimerHandler timerHandler;
Android/UploadFiles_8448/200804/20080419152818823.gif" align=top>
public Timer timer;
public MyTimerTask    task;

... ...

timer
=new Timer(true);
task
=new MyTimerTask(this);

... ...
那个MyTimerTask是MainActivity的一个内嵌类,实现如下:
    private class MyTimerTask extends TimerTask
    
{
        
private MainActivity me;
        
private int a=0;
        
        
public MyTimerTask(MainActivity p){
            me
=p;
        }

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

            timerHandler.sendEmptyMessage(
0);            
        }

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

    
private MainView me;
    
public TimerHandler(MainView m){
        me
=m;
    }

    
    @Override
    
public void handleMessage(Message msg) {
        Log.d(
"Ti",msg.toString());
        me.invalidate();
    }


}

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

另外,发现Android的模拟器运算速度不如BREW的模拟器,相当的慢。
相关文章:
Android学习笔记(12)-开始做一个数独游戏[补充]
Android学习笔记(10)-开始做一个数独游戏[中]
Android学习笔记(9)-开始做一个数独游戏[上]
Android学习笔记(8) — GridView与ImageView
Android学习笔记(7)—关于Service和Notification的体验
Android学习笔记(6)—关于Dialog的简单体验
Android学习笔记(5)-关于ListActivity的简单体验
Android学习笔记(4)-学习Intent的使用
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号