Timer、TimerTask的简单应用及如何解决多次调度相同任务。
2013-08-14 16:51
483 查看
第一点:如何实现计时器暂停,开始,和重新开始功能
android里面若牵涉到不断动态刷新ui界面的一般会用到计时器TImer,而用到它无非就是暂停,开始,和重新开始这三个功能。具体如何实现呢,参考如下android实例:
public class TimerActivity extends Activity implements OnClickListener
{
Timer timer;
TimerTask task;
Handler handler;
boolean isStop = false;
boolean isGOing = false;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button start = (Button) findViewById(R.id.button1);
Button stop = (Button) findViewById(R.id.button2);
Button restart = (Button) findViewById(R.id.button3);
start.setOnClickListener(this);
stop.setOnClickListener(this);
restart.setOnClickListener(this);
handler = new Handler()
{
public void handleMessage(Message msg)
{
System.out.println("********");
super.handleMessage(msg);
}
};
}
private void restart()
{
if (timer != null)
{
timer.cancel();
timer = null;
}
if (task != null)
{
task.cancel();
task = null;
}
isStop = false;
isGOing = false;
start();
}
private void stop()
{
isStop = !isStop;
}
private void start()
{
if (isGOing)
{
isStop = false;
return;
}
if (timer == null)
{
timer = new Timer();
}
if (task == null)
{
task = new TimerTask()
{
public void run()
{
if (isStop)
{
return;
}
handler.sendEmptyMessage(0);
}
};
}
if (timer != null && task != null)
{
timer.schedule(task, 1000, 1000);
}
isGOing = true;
}
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
start();
break;
case R.id.button2:
stop();
break;
case R.id.button3:
restart();
break;
}
}
public boolean onCreateOptionsMenu(Menu menu)
{
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit");
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
{
public boolean onMenuItemClick(MenuItem item)
{
System.exit(0);
return true;
}
});
return true;
}
}
第二点:Timer、TimerTask的简单应用及如何解决多次调度相同任务。
1、Timer类用来干嘛滴?Timer是提供以指定的时间间隔执行某方法的这样一种机制,即如果想要实现一个定时发送数据,比如每隔3s中发送一次心跳报文,或者执行某个指定的方法,都可以考虑用Timer类来实现,不过要提出的是Timer类一边用来做一些比较简单又不耗时间的操作。据说是因为它执行的任务仍然在主线程里面(不确定,望牛人指出)。
2、Timer类最常用的方法:
cancel() //取消当然任务
schedule(TimerTask
task, long delay) //延时一段时间执行task任务
schedule(TimerTask
task, long delay, long period)//延时delay时间后,执行task任务,以后每隔peroid时间执行一次task任务。
3、如何用?
在Java中如何使用,代码如下:
public class TimerTest
{
public static void main(String[] args)
{
timerTest();
}
private static void timerTest()
{
final Timer timer = new Timer();
TimerTask task = new TimerTask()
{
int i = 0;
public void run()
{
System.out.println("次数====" + i++);
if(i == 10)
{
i = 0 ;
timer.cancel();
// timerTest();
}
}
};
timer.schedule(task, 1000, 1000);
}
}
注: 注释掉蓝色字眼的timerTest();是用来解决多次调度执行相同任务实现滴。
就如实现从0到10输出后,又要从0开始输出,这两次调度。就要用重新调用此方法来实现。
这是由于Timer和TimerTask类的对象只能用一次,所以如果想多次调度同一样的任务,必须重新实例化,这也就是为什么我将final
Timer timer = new Timer();
TimerTask task = new TimerTask()写入方法内部,而不是作为全局变量使用。
Android里面,代码如下:
public
class TimerTestAndroidActivity extends Activity
{
Handler handler;
TextView textView;
Timer timer ;
public
void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textView1);
playTimer();
handler =
new Handler()
{
int
i = 0;
public
void handleMessage(Message msg)
{
i = msg.what;
textView.setText("The current number is " +
i);
if (i == 5)
{
timer.cancel();
playTimer();
}
}
};
}
private
void playTimer()
{
timer=
new Timer();
timer.schedule(new TimerTask()
{ int
i;
public
void run()
{
Message msg = new Message();
msg.what =
i++;
handler.sendMessage(msg);
}
}, 1000, 1000);
}
}
相关文章推荐
- Timer、TimerTask的简单应用及如何解决多次调度相同任务。
- JDK中的Timer和TimerTask详解 目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 sche
- android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法【转】
- 如何解决数据一致性、任务调度、流水号生成等问题?
- 简单的使用java Timer调度任务
- Java定时任务调度工具详解(2)— Timer 函数的综合应用
- Java Web应用中如何实现任务有效调度-Java基础-Java-编程开发
- 多线程应用:用TimerTask于Timer任意时间调度任务
- 如何简单的解决手速太快,点击button太多,而造成数据多次提交
- Java Web应用中如何实现任务有效调度
- 【TimerTask】android TimerTask 的简单应用
- android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法
- 任务调度的 Java 实现方法一:Timer、TimerTask、 ScheduledExecutorService
- Java定时任务调度工具详解之Timer篇(初级)Timer函数的综合应用
- Java Web应用中如何实现任务有效调度
- 任务调度之Timer、TimerTask
- java任务调度Timer简单例子
- android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法
- 如何解决数据一致性、任务调度、流水号生成等问题?
- 任务调度(三)——Timer的替代品ScheduledExecutorService简单介绍