Handler實現倒計時的兩種方式
阿新 • • 發佈:2019-01-08
背景:
最近專案中,正好做到登入/註冊這個功能塊。它需要通過傳送驗證碼,在規定的時間內用驗證碼來完成登入/註冊。之前的專案中也有這個功能,但是覺得太複雜了,只好自己重新實現一遍。用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的便利方法。