免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1314 | 回复: 0
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-18 11:07 |只看该作者 |倒序浏览
继续,最后再讨论一下定时器的实现。
本来很简单的一件事,直接用java.util.timer应该就够用了,但是发现在它的task中无法去invalidate我们的MainView,很郁闷。这一点的处理说明 Android还是相对线程安全的。
折腾良久,明白了非得再做一个Handler,才能在线程中操作界面元素。所以,代码比brew复杂了一点。
先还是用Timer和TimerTask来做,如下:

public TimerHandler timerHandler;

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的模拟器,相当的慢。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85805/showart_1421770.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP