Android中几种常用的定时器和延时方法

一、三种常用的定时器
1.Handler类的postDelayed方法:

Handler mHandler = new Handler();
                 Runnable r = new Runnable() {

                    @Override
                    public void run() {
                            //do something
                            //每隔1s循环执行run方法
                            mHandler.postDelayed(this, 1000);
                    }
                };


主线程中调用:  mHandler.postDelayed(r, 100);//延时100毫秒

2.用handler+timer+timeTask方法:

Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                //do something
            }
            super.handleMessage(msg);
        }
    };

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };
 主线程中调用:timer.schedule(timerTask,1000,500);//延时1s,每隔500毫秒执行一次run方法

3.Thread+handler方法:

Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                //do something
            }
            super.handleMessage(msg);

        }
    };

    class MyThread extends Thread {//这里也可用Runnable接口实现
        @Override
        public void run() {
            while (true){
                try {
                    Thread.sleep(1000);//每隔1s执行一次
                    Message msg = new Message();
                    msg.what = 1;
                    handler.sendMessage(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    }
    
主线程中调用:new Thread(new MyThread()).start();

二、三种延时的快捷方法:
1.Handler的postDelayed方法:

new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
              //do something
          }
       }, 1000);    //延时1s执行

2.timer + TimerTask方法:

timer = new Timer();
                 timer.schedule(new TimerTask() {                   
                    @Override
                    public void run() {
                          //do something
                    }
                },1000);//延时1s执行

3.Thread方法:

new Thread(new MyThread()).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);//延时1s
                    //do something
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
断的概念和作用: 断是一种机制,用于在微处理器执行程序的过程,暂停当前正在执行的任务,转而执行一个特定的代码块,然后再返回到原来的任务断可以用于响应外部事件(如按键、传感器信号等)或内部事件(如定时器溢出、串口接收等),实现实时响应和异步处理。 断的作用: 1. 实时响应:断可以立即响应外部或内部事件,使得系统能够及时处理紧急或重要的任务。 2. 异步处理:断允许系统在执行主任务的同时,处理其他事件,提高系统的效率和灵活性。 3. 时间控制:通过定时器断,可以实现精确的时间控制,例如定时触发任务、生成精确的时间延迟等。 4. 多任务管理:断允许系统在多个任务之间进行切换,实现多任务管理和调度。 使用定时器进行延时操作: 定时器可以用来生成精确的时间延迟,以下是使用定时器进行延时操作的一般步骤: 1. 配置定时器:使用STM32CubeMX或编写代码配置定时器的计数模式、预分频系数和重载值等参数。 2. 启动定时器:使用HAL库提供的函数启动定时器,开始计数。 3. 等待定时器溢出:使用HAL库提供的函数或轮询定时器状态的方式,等待定时器溢出。 4. 定时器断处理函数:在定时器溢出时,断服务程序(ISR)会被执行,可以在ISR进行延时结束后的处理。 以下是一个基于定时器延时操作的示例代码: ```c #include "stm32f4xx_hal.h" TIM_HandleTypeDef htim2; void SysTick_Handler(void) { HAL_IncTick(); } void TIM2_IRQHandler(void) { HAL_TIM_IRQHandler(&htim2); } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { // 定时器溢出后的处理 } } void delay_ms(uint32_t ms) { HAL_Delay(ms); } int main(void) { HAL_Init(); SystemClock_Config(); // 初始化定时器 __HAL_RCC_TIM2_CLK_ENABLE(); htim2.Instance = TIM2; htim2.Init.Prescaler = 1000 - 1; // 设置预分频系数 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 10000 - 1; // 设置重载值 HAL_TIM_Base_Init(&htim2); // 启动定时器 HAL_TIM_Base_Start_IT(&htim2); while (1) { // 延时1秒 delay_ms(1000); // 延时结束后的处理 } } ``` 以上代码使用定时器TIM2生成1秒的延时定时器溢出后会调用`HAL_TIM_PeriodElapsedCallback()`函数进行延时结束后的处理。在主循环,使用`delay_ms()`函数实现1秒的延时

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智玲君

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值