国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android計(jì)時(shí)與倒計(jì)時(shí)實(shí)現(xiàn)限時(shí)搶購(gòu)的5種方法

2019-12-12 01:10:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在購(gòu)物網(wǎng)站的促銷活動(dòng)中一般都有倒計(jì)時(shí)限制購(gòu)物時(shí)間或者折扣的時(shí)間,這些都是如何實(shí)現(xiàn)的呢?

在一個(gè)安卓客戶端項(xiàng)目中恰好遇到了類似的問(wèn)題,一開(kāi)始使用的是Timer與 TimerTask, 雖然此方法通用,但后來(lái)考慮在安卓中是否有更佳的方案,于是乎共找到以下五種實(shí)現(xiàn)方案,另外還有一種使用CountDownTimer進(jìn)行計(jì)時(shí)的方面,我會(huì)在單獨(dú)的文章中進(jìn)行介紹

效果如圖:

方法一

Timer與TimerTask(Java實(shí)現(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的改進(jì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    }        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(最簡(jiǎn)單型) 

  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);      }    };  }  

計(jì)時(shí)與倒計(jì)時(shí)

方法1,方法2和方法3,都是倒計(jì)時(shí)
方法4,方法5,都是計(jì)時(shí)
計(jì)時(shí)和倒計(jì)時(shí),都可使用上述方法實(shí)現(xiàn)(代碼稍加改動(dòng))

UI線程比較

方法1,方法2和方法3,都是在UI線程實(shí)現(xiàn)的計(jì)時(shí);
方法4和方法5,是另開(kāi)Runnable線程實(shí)現(xiàn)計(jì)時(shí)

實(shí)現(xiàn)方式比較

方法1,采用的是Java實(shí)現(xiàn),即Timer和TimerTask方式;
其它四種方法,都采用了Handler消息處理

推薦使用

如果對(duì)UI線程交互要求不很高,可以選擇方法2和方法3
如果考慮到UI線程阻塞,嚴(yán)重影響到用戶體驗(yàn),推薦使用方法4,另起線程單獨(dú)用于計(jì)時(shí)和其它的邏輯處理
方法5,綜合了前幾種方法的優(yōu)點(diǎn),是最簡(jiǎn)的

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 英超| 阿荣旗| 乐清市| 互助| 蚌埠市| 景谷| 贵定县| 鄂温| 霍城县| 湘潭县| 邻水| 卫辉市| 旬阳县| 海淀区| 金湖县| 柳林县| 和政县| 卓尼县| 铅山县| 新河县| 老河口市| 公安县| 丰台区| 浮山县| 华阴市| 阳高县| 灌云县| 靖远县| 资源县| 萨迦县| 团风县| 佛冈县| 双桥区| 双峰县| 郴州市| 宁蒗| 盘锦市| 平顶山市| 蛟河市| 雷州市| 西青区|