Android 延时任务 Timer简单使用

1,介绍:

【1】Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。

【2】在Android平台中需要反复按周期执行方法可以使用Java上自带的TimerTask类,TimerTask相对于Thread来说对于资源消耗的更低,除了使用Android自带的AlarmManager使用Timer定时器是一种更好的解决方法。

【3】运行机制:

程序运行:

在初始化Timer时 ,开启一个线程循环提取任务数组中的任务,如果任务数组为空,线程等待直到添加任务;

当添加任务时,唤醒线程,提取数组中标记为1的任务,

如果该任务状态为CANCELLED,则从数组中删除任务,continue ,继续循环提取任务;

然后将当前时间与任务执行时间点比较 标记taskFired=executionTime<=currentTime;

taskFired =false ,说明任务执行时间还没到,则调用wait等待(executionTime-currentTime) 时间长度,然后循环重新提取该任务;

taskFired =true,说明任务执行时间已经到了,或者过去了。继续判断 任务循环时间间隔period;period=0时,说明此次任务是非循环任务,直接将该任务从数组中删除,并将状态置为EXECUTED,然后执行任务的run方法!

period!=0时,说明此次任务时循环任务,将该任务的执行时间点向前推进,具体推进时间根据调用的方法判断;

如果是schedule方法,则在当前时间基础上向前推进period时间长度;

如果是scheduleAtFixedRate方法,则在当前任务执行时间点基础上向前推进period时间长度,最后执行任务的run方法;循环提取任务

2,常用方法:

//time为Date类型:在指定时间执行一次。

timer.schedule(task, time);

//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。timer.schedule(task, firstTime, period);

//delay 为long类型:从现在起过delay毫秒执行一次。

timer.schedule(task, delay);

//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。

timer.schedule(task, delay, period);

3,简单使用:

public class MainActivity extends Activity {



    private Timer timer;

    private TimerTask task;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        timer = new Timer();

        task = new TimerTask() {

            

            @Override

            public void run() {

                System.out.println("我执行了");

                

            }

        };

        //1秒后 执行task  

        timer.schedule(task, 1000,1000);

    }



    @Override

    protected void onDestroy() {

        //当Activity销毁的时候 终止计时器

        timer.cancel();

        task.cancel();

        super.onDestroy();

    }

}



4,使用timer 更新UI

public class MainActivity extends AppCompatActivity {



    private Handler handler = new Handler(){

        @Override

        public void handleMessage(Message msg) {

            button.setText("wudi");



            super.handleMessage(msg);

        }

    };

    private Button button;

    private Timer timer;

    private TimerTask timerTask;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button);

        //【1】创建定时器

        timer = new Timer();

        //【2】创建定时任务,把要做的事放在run方法里

        timerTask = new TimerTask() {

            @Override

            public void run() {

                Message message = new Message();

                handler.sendMessage(message);

            }

        };

        //【3】定时器进行安排

        timer.schedule(timerTask, 12000);

    }



    @Override

    protected void onDestroy() {

        //【4】在activity消失的时候取消任务

        timer.cancel();

        timerTask.cancel();

        super.onDestroy();

    }

}





猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/84989564