方法一
Timer与TimerTask(Java实现)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
Timer timer = new Timer();
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
timer.schedule(task, 1000, 1000); // timeTask
}
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() { // UI thread
@Override
public void run() {
recLen--;
txtView.setText(""+recLen);
if(recLen < 0){
timer.cancel();
txtView.setVisibility(View.GONE);
}
}
});
}
};
}
方法二TimerTask与Handler(不用Timer的改进型)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
Timer timer = new Timer();
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
timer.schedule(task, 1000, 1000); // timeTask
}
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
switch (msg.what) {
case 1:
txtView.setText(""+recLen);
if(recLen < 0){
timer.cancel();
txtView.setVisibility(View.GONE);
}
}
}
};
TimerTask task = new TimerTask() {
@Override
public void run() {
recLen--;
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
}
方法三
Handler与Message(不用TimerTask)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
Message message = handler.obtainMessage(1); // Message
handler.sendMessageDelayed(message, 1000);
}
final Handler handler = new Handler(){
public void handleMessage(Message msg){ // handle message
switch (msg.what) {
case 1:
recLen--;
txtView.setText("" + recLen);
if(recLen > 0){
Message message = handler.obtainMessage(1);
handler.sendMessageDelayed(message, 1000); // send message
}else{
txtView.setVisibility(View.GONE);
}
}
super.handleMessage(msg);
}
};
}
方法四
Handler与Thread(不占用UI线程)
public class timerTask extends Activity{
private int recLen = 0;
private TextView txtView;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
new Thread(new MyThread()).start(); // start thread
}
final Handler handler = new Handler(){ // handle
public void handleMessage(Message msg){
switch (msg.what) {
case 1:
recLen++;
txtView.setText("" + recLen);
}
super.handleMessage(msg);
}
};
public class MyThread implements Runnable{ // thread
@Override
public void run(){
while(true){
try{
Thread.sleep(1000); // sleep 1000ms
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}catch (Exception e) {
}
}
}
}
}
方法五
Handler与Runnable(最简单型)
public class timerTask extends Activity{
private int recLen = 0;
private TextView txtView;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.timertask);
txtView = (TextView)findViewById(R.id.txttime);
handler.postDelayed(runnable, 1000);
}
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
recLen++;
txtView.setText("" + recLen);
handler.postDelayed(this, 1000);
}
};
}
计时与倒计时
方法1,方法2和方法3,都是倒计时
方法4,方法5,都是计时
计时和倒计时,都可使用上述方法实现(代码稍加改动)
UI线程比较
方法1,方法2和方法3,都是在UI线程实现的计时;
方法4和方法5,是另开Runnable线程实现计时
实现方式比较
方法1,采用的是Java实现,即Timer和TimerTask方式;
其它四种方法,都采用了Handler消息处理
推荐使用
如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理
方法5,综合了前几种方法的优点,是最简的
参考推荐:
Android之多线程工作-AsyncTask与handler
分享到:
相关推荐
Android实现计时与倒计时(限时抢购)的几种方法
主要介绍了Android实现计时与倒计时的常用方法,总结并对比分析了几种常用计时方法的特点,具有一定参考借鉴价值,需要的朋友可以参考下
好几种样式的倒计时程序,android初学者可以随意更改。
Android中实现定时器的四种方式 第一种方式利用Timer和TimerTask 1、继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); //delay为long,period为long:从现在起过delay毫秒...
官方的例子用来实现定时器,突然觉得这是一个很神奇的事情,就搜集了一些资料,把我知道的实现计时器的几种方法写下来,给自己加深记忆,也分享给大家。 正文 我用到的几种实现定时器的类:Handler, Timer, Thread...
Android Wifi方法大全【总有一种方法适合你】 android开发环境搭建篇详尽的教程实例汇 图形图像之图像处理(缩放 旋转 转化) android开发之【腾讯微博android客户端开发】Parameter类和SyncHttp 网友自己写的...
如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用 CountDownTimer 定时器简单封装下此效果,方便我们随时调用。 首页先在 attrs.xml 中定义下所需的几个属性: <attr...
5.2 实现滑动的七种方法 91 5.2.1 layout方法 92 5.2.2 offset Left And Right()与offset Top And Bottom() 93 5.2.3 Layout Params 93 5.2.4 scroll To与scrollBy 94 5.2.5 Scroller 96 5.2.6 属性动画 ...
本项目是一个钻石连连看的小游戏源码,游戏有普通模式、计时模式、无尽模式三种游戏模式,普通模式就是一局基类特定消除数就可以到下一局,计时模式使用倒计时来控制每局时间,无尽模式没玩过。自带一个高分排行榜,...
alarmmanager 计时器,android自己的计时器,区别于timer,,包括在api19之前的两种方式,以及api19之后的两种(都是单次的),主要运用的也就是这几种。还有api19后的重复执行的实现。(结果在应用中用文字表述了)...
无游戏道具,游戏有普通模式、计时模式、无尽模式三种游戏模式,普通模式就是一局基类特定消除数就可以到下一局,计时模式使用倒计时来控制每局时间,无尽模式没玩过。自带一个高分排行榜,在玩普通模式的时候一开始...
|--缓存优化之几种方案lastModified |--缓存优化之本地缓存优化(超过规定值或SD卡容量不够时) |--网络post提交查询请求 |--网络之HttpClient的get和post用法 |--网络之判断网络状态是否可用 |--网络之设置apn |--...
注意 该存储库包含用于最终目标...如果您是Android Studio程序员,则有几种方法可以下载此存储库。 请注意,如果您使用Blocks或OnBot Java Tool对机器人进行编程,则无需下载此存储库。 如果您是git用户,则可以克隆
Power Nap Alarm 旨在为忙碌的人们提供一种快速且极其简单的方法,只要他们有几分钟的空闲时间,就可以挤入一个小睡片刻。 简单的卡片界面设计得尽可能简单,只需点击一下即可设置警报。 主界面 为简单起见,有一个...
与屏幕的这种物理接触是使用安装在探头上的加速度计来计时的。 (滚动)。 -使用光电二极管检测屏幕是黑屏还是白屏。 。 MIDI输入和输出延迟可以或下载适用于Android的WALT应用程序,或在下载该应用程序; iOS应用...
几种测试方法。 有“自检”,“使用变体测试”,“拼写检查”。 通过TTS的文本发音。 您可以选择提问和回答的语言,并自动说出它们。 隐藏问题文本以刺激听力技能的提高,这在外语学习中非常有用。 卡倒置。 ...
钻石消消看小游戏源码,游戏有普通模式、计时模式、无尽模式三种游戏模式,普通模式就是一局基类特定消除数就可以到下一局,计时模式使用倒计时来控制每局时间,无尽模式没玩过。自带一个高分排行榜,在玩普通模式的...
客户端套接字有几种不同的配置。 我使用的匹配对是 ServerSocket 和 ClientSocketOne.java。 我将它们放在一起用于 Android 测试目的,因此它们不是非常健壮的应用程序。 小心关闭插座,以免挂起任何东西。
支持MP3, WMA, OGG, wav文件以及音频CD,并且可以从CD转录为MP3, WMA, OGG格式,还带有烧录音乐CD功能,至于MP3, WMA, OGG, WAV几种格式的互转更是不在话下。软件可以外接winamp播放,也可以使用自带的播放器,支持...