Android計時與倒計時實現(xiàn)限時搶購的5種方法
在購物網(wǎng)站的促銷活動中一般都有倒計時限制購物時間或者折扣的時間,這些都是如何實現(xiàn)的呢?
在一個安卓客戶端項目中恰好遇到了類似的問題,一開始使用的是Timer與 TimerTask, 雖然此方法通用,但后來考慮在安卓中是否有更佳的方案,于是乎共找到以下五種實現(xiàn)方案,另外還有一種使用CountDownTimer進行計時的方面,我會在單獨的文章中進行介紹
效果如圖:

方法一
Timer與TimerTask(Java實現(xiàn))
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,都是計時
計時和倒計時,都可使用上述方法實現(xiàn)(代碼稍加改動)
UI線程比較
方法1,方法2和方法3,都是在UI線程實現(xiàn)的計時;
方法4和方法5,是另開Runnable線程實現(xiàn)計時
實現(xiàn)方式比較
方法1,采用的是Java實現(xiàn),即Timer和TimerTask方式;
其它四種方法,都采用了Handler消息處理
推薦使用
如果對UI線程交互要求不很高,可以選擇方法2和方法3
如果考慮到UI線程阻塞,嚴重影響到用戶體驗,推薦使用方法4,另起線程單獨用于計時和其它的邏輯處理
方法5,綜合了前幾種方法的優(yōu)點,是最簡的
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android限時搶購倒計時實現(xiàn)代碼
- android實現(xiàn)圓環(huán)倒計時控件
- android利用handler實現(xiàn)倒計時功能
- Android自定義view實現(xiàn)倒計時控件
- Android實現(xiàn)倒計時效果
- 解決Android-RecyclerView列表倒計時錯亂問題
- Android實現(xiàn)自定義倒計時
- Android 倒計時控件 CountDownView的實例代碼詳解
- Android倒計時神器(CountDownTimer)
- Android 簡單實現(xiàn)倒計時功能
- android實現(xiàn)倒計時功能(開始、暫停、0秒結束)
- Android 實現(xiàn)搶購倒計時功能的示例
相關文章
OpenHarmony實現(xiàn)屏幕亮度動態(tài)調節(jié)方法詳解
大家在拿到dayu之后,都吐槽說,會經(jīng)常熄屏,不利于調試,那么有沒有一種辦法,可以讓app不熄屏呢,答案是有的,今天我們就來揭秘一下,如何控制屏幕亮度2022-11-11
Android中的webview監(jiān)聽每次URL變化實例
這篇文章主要介紹了Android中的webview監(jiān)聽每次URL變化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android 詳解ThreadLocal及InheritableThreadLocal
這篇文章主要介紹了Android 詳解ThreadLocal及InheritableThreadLocal的相關資料,需要的朋友可以參考下2017-01-01
Android利用碎片fragment實現(xiàn)底部標題欄(Github模板開源)
Fragment可以作為Activity的組成部分,一個Activity可以有多個Fragment,這篇文章主要介紹了Android利用碎片fragment實現(xiàn)底部標題欄(Github模板開源),需要的朋友可以參考下2019-12-12
android開發(fā)教程之文本框加滾動條scrollview
EditText與TextView加上滾動條其實很簡單,只需要在文本輸入框或者文本顯示框上面加上滾動條控件即可2014-02-02

