专栏首页C++核心准则原文翻译自学鸿蒙应用开发(39)- 使用多线程功能实现定时器

自学鸿蒙应用开发(39)- 使用多线程功能实现定时器

很多应用需要按照一定周期执行某些特定动作,本文通过一个时钟小例子介绍使用使用鸿蒙系统的多线程功能实现这一功能。以下是动作视频:

准备布局

下面的代码为了方便实现,使用TimePicker表示现在时间:

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical">
    <TimePicker
        ohos:id="$+id:time_picker"
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:normal_text_size="25fp"
        ohos:selected_text_size="80fp"/>
</DirectionalLayout>

实现代码

以下代码是在MainAbilitySlice类中实现定时器功能的代码。第15行开始的代码使用uiTaskDispatcher生成一个延迟任务,延迟时间是50ms。

public class MainAbilitySlice extends AbilitySlice {
    static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MainAbilitySlice");
    long lastSecond = 0;
    TimePicker timePicker = null;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        timePicker = (TimePicker)findComponentById(ResourceTable.Id_time_picker);
        onTimer();
    }
    void onTimer(){
        final long delayTime = 50L;
        TaskDispatcher uiTaskDispatcher = getUITaskDispatcher();
        Revocable revocable = uiTaskDispatcher.delayDispatch(new Runnable() {
            @Override
            public void run() {
                Calendar rightNow = Calendar.getInstance();
                long currentSecond = rightNow.get(Calendar.SECOND);
                if(lastSecond != currentSecond) {
                    timePicker.setHour(rightNow.get(Calendar.HOUR_OF_DAY));
                    timePicker.setMinute(rightNow.get(Calendar.MINUTE));
                    timePicker.setSecond(rightNow.get(Calendar.SECOND));
                    lastSecond = currentSecond;
                }
                onTimer();
            }
        }, delayTime);
    }
}

延迟任务中的需要处理是根据现在时间设置timerPicker的小时、分、秒信息。其中有两点需要注意:

  1. 延迟任务的周期是50ms,当检测到秒值变化后更新timePicker的内容
  2. 延迟任务的最后再次调用onTimer方法,这样延迟任务会不断被触发。

作者著作介绍

《实战Python设计模式》是作者去年3月份出版的技术书籍,该书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 前端视角看HarmonyOS

    公元 2021 年 6 月 2 日,【 HarmonyOS2.0 】正式发布,以 JavaScript 作为 IoT 应用开发的架构语言,这是继 SpaceX ...

    公众号@魔术师卡颂
  • 【第22期】HarmonyOS应用开发(基础篇)

    这不就是说,以后华为手机都是鸿蒙系统了嘛?鸿蒙还发出了一条视频,视频中显示2021年6月2号将开启鸿蒙操作系统及华为全场景新品发布会。预计现在支持EMUI11升...

    siberiawolf
  • 我的HarmonyOS实战——鸿蒙系统初定义

    鸿蒙并不是一个单纯的手机操作系统,而是手机+智能设备的总称。可以安装在包括手机、手表、无人机等很多设备上。

    天道Vax的时间宝藏
  • 为鸿蒙说两句公道话(我对鸿蒙的一些看法)

    今天看了鸿蒙系统的评测,看完后我感觉很欣慰,为什么这么说 ?不是很多人吐槽鸿蒙是 Android 套壳吗 ?或者叫鸿蒙 UI 吗?说鸿蒙没有自己的核心技术。看了...

    phoenix.xiao
  • 华为「鸿蒙」出世:全球首个微内核全场景分布式OS,可取代安卓,发布即开源

    这是华为历史上规模最大的一次开发者大会,除了万众瞩目的鸿蒙系统之外,华为 EMUI10 系统、搭载海思鸿鹄 818 智能芯片的「荣耀智慧屏」也会在大会上陆续亮相...

    机器之心
  • HarmonyOS与Android的全面对比

    第二是我个人非常看好鸿蒙系统的未来,清楚明白华为和一些民族企业担负的责任和国人的期待,虽然带着一些民族感情;鸿蒙刚发布的时候自己是非常激动的,但是后来项目太忙一...

    肉眼品世界
  • 不吹不擂,一文揭秘鸿蒙操作系统

    ? 作者:michalliu,腾讯 WXG 客户端开发工程师 华为鸿蒙OS有什么创新,是否自主研发完全开源,本文带你深入鸿蒙的世界。 一、初识鸿蒙 国内在计算...

    腾讯技术工程官方号
  • 万字详解!鸿蒙操作系统关键特性解读

    大部分人认为,操作系统本来就是与计算机(IT设备)一体的。究竟计算机为什么需要操作系统?可能我们并不会去特意想这个问题。

    程序IT圈
  • 【鸿蒙学院】鸿蒙App开发直播学员提问与回答

    Q1. 安卓开发的APP能运行在鸿蒙系统么,鸿蒙和安卓的关系是子集还是扩展或是完全独立不同的

    蒙娜丽宁
  • 让 Flutter 在鸿蒙系统上跑起来

    鸿蒙系统 (HarmonyOS)是华为推出的一款分布式操作系统,那么如何在保证开发迭代效率的前提下,以相对低的成本将移动应用快速移植到鸿蒙平台上呢?美团外卖 M...

    美团技术团队
  • 前端开发华为鸿蒙系统应用 OpenHarmony JS

    其实说了这么多,也只是一个噱头,未来的路还很长,我经常再 blink 里面看到有人投票说,华为鸿蒙操作系统将取代安卓操作系统,我先否定一下。发展好了最多也只是三...

    孙叫兽
  • 这就是鸿蒙系统?

    我手头使用的是一部华为Mate 20 pro手机,快三年时间了。作为一名数码爱好者,对于系统升级非常积极,每次收到系统更新通知,都会在第一时间升级。这次鸿蒙系统...

    云水木石
  • 任正非:鸿蒙系统已经上网,即将应用到全系产品

    据新浪报道,华为创始人任正非在 2020 冬季达沃斯论坛上表示,鸿蒙系统已经上网,未来会应用到华为旗下手机、平板、电视等系列产品。

    SDNLAB
  • 使用了10年的“鸿蒙”商标,要被撤销了?

    说起“鸿蒙”,想必大家脑海里闪过的第一反应都是华为的鸿蒙系统。 作为国货之光,华为自主研发的鸿蒙操作系统打破了美国和IT巨头对其芯片的垄断,举世瞩目,备受热捧...

    腾讯云DNSPod团队
  • 我的HarmonyOS实战——鸿蒙系统开发入门学习

    安卓操作系统连接外部设备时,发现,配对,连接,组合,验证每一步都不能少。连接上了之后才能调用控制第三方设备。换一个设备之后,所有的代码需要重写。所有用安卓也可以...

    天道Vax的时间宝藏
  • 鸿蒙OS揭面纱,开发者怎么看

    千呼万唤使出来,2019.8.9下午,华为消费者业务CEO余承东正式官方宣布鸿蒙操作系统(HarmonyOS)。小编将从研发工程师的视角、结合官方报道,说说我对...

    陆道峰
  • 鸿蒙 HAIWEI DevEco Studio 安装配置,运行Hello World!

    2020年9月10日,华为在HDC开发者大会上如约发布鸿蒙 2.0,并面向应用开发者发布Beta版本。明年鸿蒙将全面支持华为手机。

    晨曦_LLW
  • 韦东山-首批华为鸿蒙系统课程开发者

    昨天下午,在华为开发者大会 2020 上,华为消费者业务 CEO 余承东宣布推出鸿蒙 OS 2.0 (HarmonyOS 2.0),正式面向应用开发者发布鸿蒙 ...

    韦东山
  • Re:从零开始的鸿蒙开发教程

    HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS...

    yuanyi928

扫码关注云+社区

领取腾讯云代金券