如何在一个Activity中,开启多个计时器

本文介绍了在Android应用中如何在一个Activity中正确管理并启动多个计时器,避免因多线程导致的计时错误。重点讨论了线程操作和UI更新的问题,以及从错误思路到解决方案的转变过程。最后提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要做这么一个东西,在一个activity中,实现多个计时器,点击哪个按钮,就开启哪个计时器。如下图:
这里写图片描述


涉及线程操作、更新ui。看着好简单,做起来还真花我不少功夫,主要是没理清这个思路,所以写代码的时候,先设计好真的很重要!!!写在博客里,让困惑的同学少走弯路吧,也给我提个醒,写代码先设计,想想行的通不。


主要是这么一个问题:每点Button的时候,就开启一个线程进行倒计时这种耗时操作(这思路其实有问题),再点其他倒计时按钮的时候就出问题了,每多点一次,倒计时速度就加快了。在这个问题困扰很久。。。因为点击倒计时按钮,主开启一个子线程,再点击倒计时按钮,就会在子线程中开启一个子线程,从而倒计时速度加快,明白了这个,实现这个功能就不是啥问题了。


最终的解决思路是,只开启一次子线程,每次点击按钮的时候,我只改变倒计时的时间就好了。当然把这个时间设置成全局的。
我绕了路,通过service实现了,其实一个activity就够了。
贴出代码:
xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myself.timer2.MainActivity">

    <LinearLayout
        android:id="@+id/ll_clock"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#737373">

        <TextView
            android:id="@+id/tv_clock"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="00:00"
            android:textColor="#ffffff"
            android:textSize="80dp" />

    </LinearLayout>
    <LinearLayout
        android:id="@+id/ll_layout1"
        android:layout_below="@+id/ll_clock"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:onClick="onClick"
            android:id="@+id/btn_03"
            android:layout_weight="1"
            android:text="3分钟"
            android:layout_width=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值