`

Android实现计时与倒计时(限时抢购)的几种方法(线程)

 
阅读更多

方法一
Timer与TimerTask(Java实现)

[java] view plaincopy
public class timerTask extends Activity{   
  
    private int recLen = 11;   
    private TextView txtView;   
    Timer timer = new Timer();   
  
    public void onCreate(Bundle savedInstanceState){   
        super.onCreate(savedInstanceState);   
           
        setContentView(R.layout.timertask);   
        txtView = (TextView)findViewById(R.id.txttime);   
           
        timer.schedule(task, 1000, 1000);       // timeTask   
    }      
  
    TimerTask task = new TimerTask() {   
        @Override   
        public void run() {   
  
            runOnUiThread(new Runnable() {      // UI thread   
                @Override   
                public void run() {   
                    recLen--;   
                    txtView.setText(""+recLen);   
                    if(recLen < 0){   
                        timer.cancel();   
                        txtView.setVisibility(View.GONE);   
                    }   
                }   
            });   
        }   
    };   
}   


方法二
TimerTask与Handler(不用Timer的改进型)

public class timerTask extends Activity{   
    private int recLen = 11;   
    private TextView txtView;   
    Timer timer = new Timer();   
  
    public void onCreate(Bundle savedInstanceState){   
        super.onCreate(savedInstanceState);   
  
        setContentView(R.layout.timertask);   
        txtView = (TextView)findViewById(R.id.txttime);   
  
        timer.schedule(task, 1000, 1000);       // timeTask   
    }      
  
    final Handler handler = new Handler(){   
        @Override   
        public void handleMessage(Message msg){   
            switch (msg.what) {   
            case 1:   
                txtView.setText(""+recLen);   
                if(recLen < 0){   
                    timer.cancel();   
                    txtView.setVisibility(View.GONE);   
                }   
            }   
        }   
    };   
  
    TimerTask task = new TimerTask() {   
        @Override   
        public void run() {   
            recLen--;   
            Message message = new Message();   
            message.what = 1;   
            handler.sendMessage(message);   
        }   
    };   
}   


方法三

Handler与Message(不用TimerTask) 
 
public class timerTask extends Activity{   
    private int recLen = 11;   
    private TextView txtView;   
  
    public void onCreate(Bundle savedInstanceState) {     
        super.onCreate(savedInstanceState);     
  
        setContentView(R.layout.timertask);    
        txtView = (TextView)findViewById(R.id.txttime);   
  
        Message message = handler.obtainMessage(1);     // Message   
        handler.sendMessageDelayed(message, 1000);   
    }     
  
    final Handler handler = new Handler(){   
  
        public void handleMessage(Message msg){         // handle message   
            switch (msg.what) {   
            case 1:   
                recLen--;   
                txtView.setText("" + recLen);   
  
                if(recLen > 0){   
                    Message message = handler.obtainMessage(1);   
                    handler.sendMessageDelayed(message, 1000);      // send message   
                }else{   
                    txtView.setVisibility(View.GONE);   
                }   
            }   
  
            super.handleMessage(msg);   
        }   
    };   
}   

 

方法四
Handler与Thread(不占用UI线程)

public class timerTask extends Activity{   
    private int recLen = 0;   
    private TextView txtView;   
  
    public void onCreate(Bundle savedInstanceState){   
        super.onCreate(savedInstanceState);   
  
        setContentView(R.layout.timertask);   
        txtView = (TextView)findViewById(R.id.txttime);   
           
        new Thread(new MyThread()).start();         // start thread   
    }      
  
    final Handler handler = new Handler(){          // handle   
        public void handleMessage(Message msg){   
            switch (msg.what) {   
            case 1:   
                recLen++;   
                txtView.setText("" + recLen);   
            }   
            super.handleMessage(msg);   
        }   
    };   
  
    public class MyThread implements Runnable{      // thread   
        @Override   
        public void run(){   
            while(true){   
                try{   
                    Thread.sleep(1000);     // sleep 1000ms   
                    Message message = new Message();   
                    message.what = 1;   
                    handler.sendMessage(message);   
                }catch (Exception e) {   
                }   
    

方法五
Handler与Runnable(最简单型)   
 
public class timerTask extends Activity{   
    private int recLen = 0;   
    private TextView txtView;   
  
    public void onCreate(Bundle savedInstanceState){   
        super.onCreate(savedInstanceState);   
  
        setContentView(R.layout.timertask);   
        txtView = (TextView)findViewById(R.id.txttime);   
        runnable.run();  
    }      
  
    Handler handler = new Handler();   
    Runnable runnable = new Runnable() {   
        @Override   
        public void run() {   
            recLen++;   
            txtView.setText("" + recLen);   
            handler.postDelayed(this, 1000);   
        }   
    };   
}   

计时与倒计时
 方法1,方法2和方法3,都是倒计时
 方法4,方法5,都是计时
 计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较
 方法1,方法2和方法3,都是在UI线程实现的计时;
 方法4和方法5,是另开Runnable线程实现计时

 实现方式比较
 方法1,采用的是Java实现,即Timer和TimerTask方式;
 其它四种方法,都采用了Handler消息处理

 推荐使用
 如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理

方法5,综合了前几种方法的优点,是最简的

分享到:
评论

相关推荐

    Android实现计时与倒计时(限时抢购)的几种方法

    Android 实现计时与倒计时(限时抢购)的几种方法 Android 实现计时与倒计时(限时抢购)的几种方法是 Android 应用程序开发中非常重要的一部分,特别是在购物网站的促销活动中。这些倒计时限制购物时间或者折扣的...

    Android计时与倒计时实现限时抢购的5种方法

    Android计时与倒计时实现限时抢购的5种方法是Android开发中常见的需求,特别是在购物网站的促销活动中,倒计时限制购物时间或者折扣的时间是非常常见的,下面我们将详细介绍Android计时与倒计时实现限时抢购的五种...

    android listview实现抢购倒计时

    在Android开发中,"android listview实现抢购倒计时"是一个常见的需求,尤其是在电商应用中,用于模拟商品抢购的紧张氛围。本教程将详细讲解如何在ListView中实现这样的功能,让每个列表项都能显示实时更新的倒计时...

    android实现限时抢购

    综上所述,实现Android限时抢购功能的关键在于自定义Adapter的构建、倒计时逻辑的处理以及合理的数据模型设计。通过合理的UI布局和网络请求,可以为用户提供流畅、实时的抢购体验。在实际开发中,还应考虑异常处理、...

    关于抢购倒计时的整理demo

    在Android开发中,抢购活动通常会设置倒计时来增加紧张感和用户参与度,本文将详细讲解如何使用`CountDownTimer`类实现抢购倒计时的逻辑。`CountDownTimer`是Android SDK提供的一种轻量级的计时器,非常适合用于这种...

    GUI中用线程实现倒计时

    通过结合Swing组件与多线程技术,可以轻松地在GUI中实现实时更新的倒计时功能。 #### 二、关键技术点解析 ##### 2.1 Swing组件基础 Swing是Java中用于创建GUI的组件工具包,它提供了大量的GUI组件,如按钮、文本框...

    Android倒计时 Android仿京东倒计时 Android商城倒计时

    在Android开发中,倒计时(CountDownTimer)是一个常用的功能,尤其在电商应用中,如京东商城,常用于限时抢购、倒计时显示等场景。本项目"Android倒计时 Android仿京东倒计时 Android商城倒计时"正是针对这种需求而...

    android限时抢购,listview解决倒计时问题,复用。

    在Android开发中,限时抢购页面常常涉及到动态更新的倒计时显示,这通常与ListView的使用密切相关。ListView因其高效的数据展示能力而被广泛应用,但同时也存在一些挑战,如倒计时的正确显示和列表滚动时的卡顿问题...

    android实现倒计时

    在Android中,有两种主要的实现倒计时的方法:`CountDownTimer`类和`Handler`配合`Runnable`。这里我们重点介绍`CountDownTimer`,因为它更易于使用且适合倒计时场景。 `CountDownTimer`是Android提供的一个内置类...

    Android高级应用源码-活动限时抢购倒计时案例.zip

    【Android高级应用源码-活动限时抢购倒计时案例】是一个典型的Android应用程序开发实例,主要涉及了在Android平台上实现动态、实时的倒计时功能,常见于电商平台的限时抢购场景。通过分析这个源码,我们可以深入学习...

    java的swing实现计时与倒计时

    总结来说,实现Java Swing的计时与倒计时功能涉及到以下几个关键点: 1. 使用Swing组件创建用户界面,如JFrame、JTextField、JButton等。 2. 处理用户输入的时间,确保格式正确。 3. 使用多线程或者javax.swing....

    android studio倒计时三秒欢迎页面

    在Android开发中,创建一个倒计时欢迎页面是一种常见的用户交互设计,它可以为用户提供一种预期的等待体验,尤其是在应用启动时。在这个特定的项目中,"android studio倒计时三秒欢迎页面"是一个使用Android Studio...

    Android-用kotlin实现的纯粹倒计时应用

    定时器与倒计时** 在Android中,倒计时功能通常通过`CountDownTimer`类实现。这是一个抽象类,需要我们覆盖它的`onTick`和`onFinish`方法,`onTick`在每间隔一定毫秒时调用,`onFinish`在倒计时结束时调用。项目中...

    android正计时和倒计时

    本教程将详细介绍如何在Android环境中实现这些功能,包括开始计时、开始倒计时、暂停、继续以及重置。 首先,我们需要了解Android中的两种主要时间处理类:`CountDownTimer`和`Chronometer`。`CountDownTimer`适用...

    android的3秒倒计时关闭界面或点击关闭

    在Android应用开发中,有时我们需要实现一种功能,即在用户界面上显示3秒倒计时,用户可以选择在倒计时结束前点击界面来取消自动关闭,或者等待倒计时结束后,程序自动关闭界面。这样的设计可以增加用户体验,给用户...

    安卓天气日历时间选择倒计时相关-android倒计时!倒计时多久刷新一次UI.rar

    在Android中,可以使用`DatePicker`和`TimePicker`对话框让用户选择日期和时间,然后将这些选择与倒计时结合,创建一个基于选定日期和时间的倒计时。 关于倒计时多久刷新一次UI,开发者需要权衡性能和用户体验。...

    C# 多线程计时器,倒计时

    在C#编程中,多线程计时器和倒计时是常见的应用场景,尤其是在需要并发执行任务或实现定时操作的场合。本篇文章将深入探讨C#中的多线程计时器以及如何实现倒计时功能。 首先,让我们了解C#中的多线程。在.NET ...

    Android 倒计时程序

    本文将深入探讨如何创建一个简单的Android倒计时程序,并基于提供的C#倒计时客户端文件,我们可以推断出虽然标题提及的是Android,但可能包含了跨平台的C#实现。 1. **基本概念** - **倒计时(Countdown)**: 是一...

    Qt5 多线程实现时钟和倒计时

    本文将深入探讨Qt5中的多线程以及如何结合Qt的信号与槽机制(connet)实现时钟和倒计时功能。 首先,多线程允许程序在不同的线程上运行独立的任务,避免了单一线程中长时间运行的操作阻塞用户界面。在Qt5中,我们...

Global site tag (gtag.js) - Google Analytics