Android計時與倒計時實現(xiàn)限時搶購的5種方法
在購物網站的促銷活動中一般都有倒計時限制購物時間或者折扣的時間,這些都是如何實現(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)搶購倒計時功能的示例
相關文章
Android自定義一個view?ViewRootImpl繪制流程示例
這篇文章主要為大家介紹了Android自定義一個view?ViewRootImpl繪制流程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
Android程序開發(fā)之使用Design包實現(xiàn)QQ動畫側滑效果和滑動菜單導航
這篇文章主要介紹了Android程序開發(fā)之使用Design包實現(xiàn)QQ動畫側滑效果和滑動菜單導航的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
Android Socket服務端與客戶端用字符串的方式互相傳遞圖片的方法
這篇文章主要介紹了Android Socket服務端與客戶端用字符串的方式互相傳遞圖片的方法的相關資料,需要的朋友可以參考下2016-05-05
PullToRefreshListView實現(xiàn)多條目加載上拉刷新和下拉加載
這篇文章主要為大家詳細介紹了PullToRefreshListView實現(xiàn)多條目加載上拉刷新和下拉加載,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Android MotionEvent中getX()和getRawX()的區(qū)別實例詳解
這篇文章主要介紹了Android MotionEvent中getX()和getRawX()的區(qū)別實例詳解的相關資料,需要的朋友可以參考下2017-03-03
深入理解TextView實現(xiàn)Rich Text--在同一個TextView設置不同字體風格
本篇文章是對Android中在同一個TextView中設置不同的字體風格進行了詳細的分析介紹,需要的朋友參考下2013-05-05

