Handler handler = new Handler() { public void handleMessage(Message msg) { //要做的事情 super.handleMessage(msg); } };2.新建一个实现Runnable接口的线程类。如下:
public class MyThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub while (true) { try { Thread.sleep(10000);//线程暂停10秒,单位毫秒 Message message=new Message(); message.what=1; handler.sendMessage(message);//发送消息 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
1.
Handler handler=new Handler(); Runnable runnable=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub //要做的事情 handler.postDelayed(this, 2000); } };
handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.
handler.removeCallbacks(runnable);
private final Timer timer = new Timer(); private TimerTask task; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub //要做的事情 super.handleMessage(msg); } };
task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Message message = new Message(); message.what = 1; handler.sendMessage(message); } };
timer.schedule(task, 2000, 2000);简要说一下上面三步提到的一些内容。
mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { ++mCount; mHandler.sendEmptyMessage(0); } }, 5*1000, 5*1000); mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { ++mCount; mHandler.sendEmptyMessage(0); } }, 5*1000, 5*1000);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000, sender); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000, sender);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender);拔掉USB线,按下电源键,过一点时间再次打开屏幕,发现定时器一直在计数。
package com.hemes.timer; import java.util.*; public class doTask extends TimerTask { // true时使用后台进程线程。只要剩下的程序记叙运行,后台进程线程就会执行。 Timer myTimer; public void start(int delay, int hour) { myTimer = new Timer(); myTimer.schedule(this, delay * 1000, hour*1000*60*60); //利用timer.schedule方法 //public void schedule(TimerTask task,long time,long period) //task被安排在延迟time后执行,执行后将每隔period(毫秒)反复执行。由于规定的时间间隔并不能保证与时钟精准的同不步,所以该方 } public void start(Date time, int hour) { myTimer = new Timer(); myTimer.schedule(this, time, hour*1000*60*60); //利用timer.schedule方法 //public void schedule(TimerTask task,Date time,long period) //task被安排在time指定的时间执行,执行后将每隔period(毫秒)反复执行。由于规定的时间间隔并不能保证与时钟精准的同不步,所以该方 } public void run() { //执行任务(sql) System.out.println("do Task..."); } public void end(){ myTimer.cancel(); //终止Timer的功能执行,但不会对正在执行的任务有影响。当执行cancel方法后将不能再用其分配任务。 } //测试 public static void main(String args[]) { doTask myTask1 = new doTask(); //Get the Date corresponding to 11:30:00 pm today. Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); Date time = calendar.getTime(); myTask1.start(time,24); //myTask1.end();//线程结束 } }