1. 程式人生 > >Handler實現倒計時的兩種方式

Handler實現倒計時的兩種方式

背景:

最近專案中,正好做到登入/註冊這個功能塊。它需要通過傳送驗證碼,在規定的時間內用驗證碼來完成登入/註冊。之前的專案中也有這個功能,但是覺得太複雜了,只好自己重新實現一遍。用Handler來做,覺得程式碼簡介,邏輯也清楚。

程式碼一:

//在向服務端傳送獲取驗證碼成功的回撥函式中,開始發訊息:
mHandler.obtainMessage();
mHandler.sendEmptyMessage(MSG_CODE);

//訊息的處理:
 private static final int MSG_CODE = 0;
 private int limitTime = 121;
 private
Handler mHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if(msg.what==MSG_CODE){ limitTime--; if(limitTime>0){ mHandler.sendEmptyMessageDelayed(MSG_CODE,1000); mBtnVerify.setText("倒計時:"
+limitTime+"s"); }else{ limitTime =121;//再次給limitTime 賦值,以便能重新計時 mBtnVerify.setText("獲取驗證碼"); } return true; } return false; } });

程式碼二:



//在向服務端傳送獲取驗證碼成功的回撥函式中,開始發訊息:
mHandler.post(myRunnale);

//訊息的處理:
private int time = 11; private Handler mHandler = new Handler(); private Runnable myRunnale = new Runnable() { @Override public void run() { time--; if(time>0){ mHandler.postDelayed(myRunnale,1000); mTvChange.setText("剩餘"+time+"s"); }else{ mTvChange.setText("完畢"); } } };

從上述程式碼中可以看出:使用Handler.post(Runnable) 是一個釋出Messgae的便利方法。