• Stars
    star
    121
  • Rank 292,782 (Top 6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一个轻量定时任务分发工具

TimeTask

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内的计划任务定时框架

More Repositories

1

AutoEx

🌞帮助Android开发者,让项目在崩溃时从异常堆栈中,自动寻找Stack Overflow的回答。
Java
823
star
2

DevNote

大鸡排的博客归档
768
star
3

PressScanCode

识别 View 上的二维码的工具库。
Java
516
star
4

AndroidHookStartActivity

两行代码启动未注册的Activity
Java
162
star
5

ReciteWords

IntelliJ IDEA、Android Studio 记单词翻译插件,将翻译记录到项目本地提供查阅。
Java
159
star
6

APPTrack

Xposed HookAPP逆向跟踪工具,跟踪Activity与Fragment启动信息等
Java
91
star
7

ApkBusBlog

安卓巴士博客非官方客户端
Java
66
star
8

Solve-Android-Fragmentation

尝试补充Android机型差异化Api。[doing]
47
star
9

CircleProgressView

一个圆型进度条,带头部进度显示,颜色、宽度大小等高度可配置
Java
40
star
10

AddShortcut

添加桌面快捷方式
Java
27
star
11

SuPerApp

无法被卸载的app
Java
24
star
12

AndroidShell

android应用内执行shell
Java
22
star
13

AndroidHomeKeyListen

home按键监听
Java
20
star
14

DoubleProcess

实现双进程守护
Java
19
star
15

React-Native-JuHeShuJu

这是一个react-native开发的聚合数据查询app
JavaScript
12
star
16

DIffuseView

一个使用了ValueAnimator的扩散动画
Java
11
star
17

MyNote

阁下可能需要找的是这个 https://github.com/BolexLiu/DevNote
7
star
18

AndroidDevHelp

该项目用来解决android编程中疑难杂症的辅助仓库。疑难问题请发Issues!
5
star
19

GitStudy

用于git命令学习的库
2
star
20

jiaomimi

使用到了九宫格解锁,生命周期回调。最大能力的去封装得比较完善,可以作为参看。包含数据库以及共享数据xml知识点
Java
1
star
21

android-addr2stack

脚本调用 android-addr2line 将 Android Native Crash 地址批量转换成代码堆栈
Python
1
star
22

androidIPC

androidIPC AIDL Test
Java
1
star