欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android計時與倒計時實現(xiàn)限時搶購的5種方法

 更新時間:2018年02月08日 11:33:27   投稿:lijiao  
這篇文章主要為大家詳細介紹了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)點,是最簡的

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論