Android的 CountDownTimer的使用
2016-05-30 22:06
471 查看
说道计时器,可能是因为从java出门的。所以一直使用的都是java的timer类以及配套的timertask类,今天逛逛博客,看到了
TextView textView;
CountDownTimer countdowntimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView) this.findViewById(R.id.textView1);
countdowntimer=new CountDownTimer(10000,1000) {
@Override
public void onTick(long millisUntilFinished) {
textView.setText(millisUntilFinished+"");
}
@Override
public void onFinish() {
textView.setText("finish");
}
};
countdowntimer.start();
}
}
代码比较简单,其中的参数
第一个为总时间,比如3000,,
第二个 间隔时间,比如1000
然后开始看看源码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
public CountDownTimer(long millisInFuture, long countDownInterval) {
mMillisInFuture = millisInFuture;
mCountdownInterval = countDownInterval;
}
这个就是构造方法了,比较简单,而且他也只有这个构造方法
public synchronized final void cancel() {
mCancelled = true;
mHandler.removeMessages(MSG);
}
然后再这个cancel类中可以看到他是通过handler去操作的,好吧,凡事离不开handler
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
synchronized (CountDownTimer.this) {
if (mCancelled) {
return;
}
final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();
if (millisLeft <= 0) {
onFinish();
} else if (millisLeft < mCountdownInterval) {
sendMessageDelayed(obtainMessage(MSG), millisLeft);
} else {
long lastTickStart = SystemClock.elapsedRealtime();
onTick(millisLeft);
long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();
while (delay < 0) delay += mCountdownInterval;
sendMessageDelayed(obtainMessage(MSG), delay);
}
}
}
};
这个是handler里的操作,看得出来。
1。必须是锁定的,这样就不会照成混乱。
2.对long型数据的操作,然后就没没了,所以还是很简单的,
对了,最后提醒,要启动时既得是用start方法
CountDownTimer这个类,照例搜索了一番,然发现他是Android封装好的一个计时的类,既然人家都封好了,使用起来肯定比timer的使用还要简单。所以做了一个简单的demo。,发现特别简单,接下来上他的用法
TextView textView;
CountDownTimer countdowntimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView) this.findViewById(R.id.textView1);
countdowntimer=new CountDownTimer(10000,1000) {
@Override
public void onTick(long millisUntilFinished) {
textView.setText(millisUntilFinished+"");
}
@Override
public void onFinish() {
textView.setText("finish");
}
};
countdowntimer.start();
}
}
代码比较简单,其中的参数
第一个为总时间,比如3000,,
第二个 间隔时间,比如1000
然后开始看看源码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
public CountDownTimer(long millisInFuture, long countDownInterval) {
mMillisInFuture = millisInFuture;
mCountdownInterval = countDownInterval;
}
这个就是构造方法了,比较简单,而且他也只有这个构造方法
public synchronized final void cancel() {
mCancelled = true;
mHandler.removeMessages(MSG);
}
然后再这个cancel类中可以看到他是通过handler去操作的,好吧,凡事离不开handler
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
synchronized (CountDownTimer.this) {
if (mCancelled) {
return;
}
final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();
if (millisLeft <= 0) {
onFinish();
} else if (millisLeft < mCountdownInterval) {
sendMessageDelayed(obtainMessage(MSG), millisLeft);
} else {
long lastTickStart = SystemClock.elapsedRealtime();
onTick(millisLeft);
long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();
while (delay < 0) delay += mCountdownInterval;
sendMessageDelayed(obtainMessage(MSG), delay);
}
}
}
};
这个是handler里的操作,看得出来。
1。必须是锁定的,这样就不会照成混乱。
2.对long型数据的操作,然后就没没了,所以还是很简单的,
对了,最后提醒,要启动时既得是用start方法
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories