`

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

阅读更多
[img]

[/img]

方法一

Timer与TimerTask(Java实现)
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,综合了前几种方法的优点,是最简的

  • 大小: 45 KB
分享到:
评论

相关推荐

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

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

    android实现限时抢购

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

    关于抢购倒计时的整理demo

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

    android listview实现抢购倒计时

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

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

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

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

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

    android实现倒计时

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

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

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

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

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

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

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

    Android RecycleView全部item倒计时的高效实现

    本篇文章将深入探讨如何高效地在Android RecycleView中实现所有item的倒计时功能。 首先,我们需要理解RecycleView的工作原理。它通过复用已滚动出屏幕的view来节省内存,这意味着一个view可能被用来显示不同的数据...

    android listview列表实现倒计时,类似商品抢购列表

    在Android开发中,创建一个类似商品抢购列表的界面,其中包含倒计时功能,是一项常见的需求。这个任务的关键在于正确地实现ListView的Adapter,并优化显示性能,避免因视图复用导致的问题。以下是一些关于如何实现这...

    android正计时和倒计时

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

    android studio倒计时三秒欢迎页面

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

    Android 倒计时程序

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

    android倒计时代码

    本文将深入探讨如何在Android中实现倒计时功能,以及如何将其应用到视频播放器和歌曲倒计时等具体场景。 首先,让我们了解Android中的`CountDownTimer`类。这个类是Android SDK提供的一个抽象类,用于执行一个固定...

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

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

    android倒计时的简单实现

    你可以在这里显示剩余时间,或者执行其他与倒计时相关的操作。 **onFinish()方法** 当倒计时结束时,`onFinish()`方法会被调用。这个方法通常用于执行倒计时结束时需要完成的任务,如显示提示信息或执行下一步操作...

Global site tag (gtag.js) - Google Analytics