CountDownTimer用法详解
来源:互联网 发布:端口号怎么telnet 编辑:程序博客网 时间:2024/05/28 15:11
当需要倒计时器功能,sdk自带的CountDownTimer类往往是首选工具。网上有很多针对该类的介绍,但鲜有文章涉及到CountDownTimer如何与Activity生命周期相互作用。
之前有个项目需要倒计时器功能,要求在ActivityA创建时开始倒计时,倒计时结束时通过intent创建另一个ActivityB。于是有下面代码
<TextView android:id="@+id/timer" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#00ff00" android:textSize="20sp" android:background="#000000" />
ActivityA onCreate(){...mTv = (TextView) findViewById(R.id.timer);myTimer = new CountDownTimer(myTime, 100) {@Overridepublic void onTick(long millisUntilFinished) {mTv.setText("剩余时间: " + millisUntilFinished / 1000 + "."+ (millisUntilFinished % 1000) / 100+"秒");}@Overridepublic void onFinish() {if (myTime / 1000 == 0) {mTv.setText("时间到!");Intent i = new Intent(ActivityA.this,ActivityB.class);String answer = getSelectedAnswer();i.putExtra(Constants.EXTRA_MESSAGE, answer);startActivity(i);finish();}}}.start();...}上面的代码确实能实现需要的功能,但是没有考虑在倒计时结束之前ActivityA可能被重建。当旋转屏幕或系统设置更新时,都会造成当前Activity的重建。结果是,每当ActivityA重建时,开始一个新的myTimer,而之前的myTimer并未被销毁。于是多个ActivityB会被创建,这明显是我们不希望发生的。
我们需要在ActivityA销毁前保存该myTimer至整个application的生命周期,然后在重建时先cancel掉之前保存的myTimer,再创建一个新的myTimer。而这个新的myTimer的第一个参数(剩余时间)应该减去ActivityA重建之前已经经历的时间。保存myTimer,可以使用
@Overridepublic Object onRetainNonConfigurationInstance() {return myTimer;}
保存已经历时间:
public void onSaveInstanceState(Bundle savedInstanceState) {savedInstanceState.putLong(TIMER_STATE, myTime);super.onSaveInstanceState(savedInstanceState);}取到这些保存的状态,使用一下代码
onCreate(){...if (savedInstanceState != null) {// Restore value of members from saved statemyTime = savedInstanceState.getLong(TIMER_STATE);myTimer = (CountDownTimer) getLastNonConfigurationInstance();myTimer.cancel();}}
这样保证了任何时间只有一个myTimer在计时,并且Activity的重建并不会暂定计时。
- CountDownTimer用法详解
- CountDownTimer用法详解
- CountDownTimer用法
- CountDownTimer用法
- CountdownTimer倒计时详解
- CountDownTimer
- CountDownTimer
- CountdownTimer
- CountDownTimer
- CountDownTimer
- CountDownTimer
- CountDownTimer
- Android倒计时定时器CountDownTimer的用法
- Android中CountDownTimer倒计时的用法
- android里CountDownTimer类的用法
- android 关于倒计时CountDownTimer的用法和实例
- CountDownTimer倒计时
- Android CountDownTimer
- MapKit学习笔记及源码分享
- winform textbox 输入状态下隐藏光标
- assert()函数用法总结
- 开始了总比没开始好
- Nutch中CrawlDatum的FetchTime的设置了解
- CountDownTimer用法详解
- 算法策略特点总结
- 快速排序和归并排序区别
- ios开发之NSUserDefaults
- cocos2d实现了以下CCEaseAction类
- HTTPCookie 的使用和讲解
- JVM内存溢出分析
- ZOJ Monthly, July 2012浙大月赛解题报告
- Android动态加载jar/dex