Android语言基础教程(225)Android线程与消息处理经典范例之简易打地鼠游戏:别让地鼠跑了!Android线程与消息处理的“降鼠十八掌”,从入门到上头

安卓打地鼠游戏实战

嘿,各位未来的Android大神们,今天咱们不聊风花雪月,来点真枪实弹的——做一个简易打地鼠游戏

别撇嘴,我知道你在想啥:“打地鼠?也太复古了吧!” 兄弟,此言差矣!这个看似简单的小游戏,可是藏着Android语言基础里两位重量级大佬:线程消息处理。搞懂它,你就能轻松拿捏那些需要“后台干活、前台更新”的复杂场景,比如下载进度条、聊天消息接收、视频流加载等等。

所以,今天咱们的目标不是做一个多炫酷的游戏,而是借“打地鼠”这个壳,把Android多线程与消息处理的“灵魂”给你彻底讲透!

一、 游戏灵魂解剖:为什么打地鼠会“卡死”?

想象一下这个场景:你兴冲冲地写好了游戏,地鼠随机从洞里钻出来。你一运行,咦?地鼠要么半天不动,要么你一点击屏幕,整个游戏就卡住,甚至弹出一个“Application Not Responding”(ANR)的崩溃对话框。

罪魁祸首就是:你把所有活儿都扔给UI主线程去干了!

  • UI主线程(霸道总裁):它是App的“门面担当”,主要负责处理和绘制用户界面、响应用户的点击、滑动等操作。它有个臭脾气:不能阻塞!
  • 地鼠的“工作”:让地鼠随机时间、随机位置出现,这本质上是一个需要持续运行、等待、再运行的循环任务。如果把这事儿交给UI线程,它就会一直忙于计算“下一个地鼠在哪”,根本没空理会你的点击操作。你点了屏幕没反应,Android系统等了幾秒后就会暴走:“这App死了吧?”,然后直接ANR给你看。

结论:所有耗时操作(比如网络请求、复杂计算、循环等待)都必须放在子线程里执行,绝不能阻塞UI主线程。

二、 降鼠第一式:创建子线程——“地鼠生成器”

那么,谁来负责源源不断地“制造”地鼠呢?就是我们勤劳的子线程

在Android中,我们可以直接使用Thread类,或者更优雅的Runnable接口。

// 这就是我们的“地鼠生成器”
private class MoleGenerator implements Runnable {
    private boolean isRunning = true; // 控制生成器开关

    @Override
    public void run() {
        // 这个run()方法里的代码,就是在子线程中运行的!
        while (isRunning) {
            // 1. 随机一个等待时间(模拟地鼠钻出洞的间隔)
            try {
                Thread.sleep(random.nextInt(2000) + 500); // 500ms到2500ms之间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 2. 随机选择一个洞(0-8共9个洞)
            int randomHole = random.nextInt(9);

            // 3. 重磅!通知主线程:“有个地鼠在X号洞冒头了!”
            // 这里我们先卖个关子,下面会重点讲
            Message msg = gameHandler.obtainMessage();
            msg.what = MOLE_APPEAR; // 消息类型:地鼠出现
            msg.arg1 = randomHole;  // 把洞的编号塞进消息里
            gameHandler.sendMessage(msg);
        }
    }

    public void stop() {
        isRunning = false;
    }
}

看,我们在子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值