TimeTask

项目地址:BolexLiu/TimeTask
简介:TimeTask 是一个轻量简洁的定时任务队列框架,专注处理多组任务分发工作 TimeTask 内部的实现时基于 AlarmManager+广播,在任务与系统 api 中间做了较好的封装
更多:作者   提 Bug   
标签:

TimeTask 是一个轻量简洁的定时任务队列框架,专注处理多组任务分发工作 TimeTask 内部的实现时基于 AlarmManager+广播,在任务与系统 api 中间做了较好的封装

简单来说满足以下应用场景:

  • 1.当你需要为任务定时启动和结束
  • 2.你有多组任务,时间线上可能存在重叠的情况

目前线上正式环境的使用:

  • 1.电视机顶盒媒体分发
  • 2.android 大屏幕广告机任务轮播

引入

根 gradle 上添加

    repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
dependencies {
    compile 'com.github.BolexLiu:TimeTask:1.1'
}

简单使用

1.定义一个 Task 为你的任务对象,注意基类 Task 对象已经包含了任务的启动时间和结束时间

    class  MyTask extends Task {
        //// TODO: 这里可以放置你自己的资源,务必继承 Task 对象
        String name;
    }

2.定义一个任务接收器

   TimeHandler<MyTask> timeHandler = new TimeHandler<MyTask>() {
        @Override
        public void exeTask(MyTask mTask) {
               //准时执行
              // 一般来说,在 exeTask 方法中处理你的逻辑就好可以,过期和未来的都不需要关注 
        }

        @Override
        public void overdueTask(MyTask mTask) {
                 ///已过期的任务
        }

        @Override
        public void futureTask(MyTask mTask) {
              //未来将要执行的任务
        }
    };

3.定义一个任务分发器,并添加接收器


        TimeTask<MyTask> myTaskTimeTask = new TimeTask<>(MainActivity.this,ACTION); // 创建一个任务处理器
        myTaskTimeTask.addHandler(timeHandler); //添加时间回掉

4.配置你的任务时间间隔,(启动时间,结束时间)

    private List<MyTask> creatTasks() {
        return  new ArrayList<MyTask>() {{
            MyTask BobTask = new MyTask();
                        //******测试 demo 请务必修改时间******
                      BobTask.setStarTime(dataOne("2017-11-08 21:57:00"));   //当前时间
                      BobTask.setEndTime(dataOne("2017-11-08 21:57:05"));  //5 秒后结束
                      BobTask.name="Bob";
                      add(BobTask);

                      MyTask benTask = new MyTask();
                      benTask.setStarTime(dataOne("2017-11-08 21:57:10")); //10 秒开始
                      benTask.setEndTime(dataOne("2017-11-08 21:57:15")); //15 秒后结束
                      benTask.name="Ben";
                      add(benTask);
        }};
    }

5.添加你的任务队列,跑起来.


        myTaskTimeTask.setTasks(creatTasks());//创建时间任务资源 把资源放进去处理
        myTaskTimeTask.startLooperTask();//  启动

这样下来,当调用 myTaskTimeTask.startLooperTask()后,会先分发给 timeHandler 名称为 Bob 的任务。 随后 10 秒分发 Ben 名称的任务。 任务处理器会根据我们配置的启动时间和结束时间进行分发工作。

完整代码参考 app 中的列子。

Api

TimeTask

  • TimeTask(Context mContext,String actionName);//初始化
  • setTasks(List mES);//设置任务列表
  • addHandler(TimeHandler mTH);//添加任务监听器
  • startLooperTask();//启动任务
  • stopLooper();//停止任务
  • spotsTask(List mSpotsTask);//插播任务
  • onColse();//关闭 防止内存泄漏

代码中已有详细注释,代码不是很复杂看原理读最好了。

注意:

  • 1.务必确保你的任务队列中的任务时已经按照时间排序的。
  • 2.务必使用泛型继承 Task 任务。
  • 3.如果你需要用到多组 TimeTask,要保证 actionName 不要重复,就是自己给取一个名字。

原理解析地址:动手写 Android 内的计划任务定时框架

随手点击下面广告,支持我维护本站吧
随手点击下面广告支持我免费维护吧
Android 开发经验分享
随手点击下面广告支持本站吧
 
Android 开发经验分享