android的倒计时的使用
在次之前先说一下java中的Timer的使用,Timer对象是直接new出来的
Timer mTimer = new Timer();
schedule方法有2个重载,一个是带2个参数的,一个是带3个参数的
Timer mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { Log.e("399", "1"); } }, 2000);
Timer mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { Log.e("399", "1"); } }, 1000, 2000);带2个参数和带3个参数的分别有什么作用呢?
2个参数的:这个方法只会执行一次run方法,即2秒后执行一次就停止执行
3个参数的:这个方法会执行多次run方法,第二个参数是指延迟多久开始执行,第三个参数为每隔多久执行一次,上述例子中指1秒后执行run()方法,每隔2秒执行一次,如果中途需要停止执行的话需要调用cancel()方法,比如:timer.cancel();
说完了Timer的基础之后再说android用的比较多2个场景,目前只归纳了2种,以后遇到更多的用法再进一步完善
一、.比如多少秒延迟后再执行某一操作,比如从闪屏页面展示2秒后进入主页面
private void goHomeActivity() { mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { startActivity(new Intent(SplashActivity.this, HomeActivity.class)); finish(); } }, 2000); }
不过这样做有一个小小的问题,在闪屏也没有展示完是,如果用户按下返回键的话,程序依然会执行倒计时里面的代码,比如下面的例子,依然会进入到HomeActivity,解决办法如下:
@Override public void onBackPressed() { timer.cancel();//当在splash页面用户按返回键就不进HomeActivity super.onBackPressed(); }
二、发送验证码之类的都需要60秒倒计时,下面的倒计时的源码如下:
倒计时为60秒,从60秒开始倒计时,需要倒计时的地方调用startTimer();
private void startTimer() { if (null != mTimer) { mTimer.cancel(); } mTimer = new Timer(); mTimer.schedule(new TimerTask() { int curSecond = 60; @Override public void run() { runOnUiThread(new TimerTask() { @Override public void run() { if (curSecond <= 0) { mGetVerifyCodeButton.setText("获取验证码"); mGetVerifyCodeButton.setEnabled(true); this.cancel(); } else { mGetVerifyCodeButton.setText(curSecond + "秒后重试"); mGetVerifyCodeButton.setEnabled(false); curSecond--; } } }); } }, 0, 1000); }
注意:
在onDestory方法中
if (null != mTimer) {
mTimer.cancel();
mTimer = null;
}