美文网首页
WorkManager :为我们执行后台任务提供了一站式解决方案

WorkManager :为我们执行后台任务提供了一站式解决方案

作者: 杰子他爸 | 来源:发表于2019-07-02 14:28 被阅读0次

    WorkManager可以用来执行一个在特定条件下触发执行的延时任务。比如我设置触发条件是,手机有网络连接的时候才会触发。当我们断网的时候打开app,我们的任务不会立即执行,当手机联网之后才会触发。

    这样我们就可以利用WorkManager轻松实现某些条件下触发的延时任务。

    引入

    在项目中引入WorkManager包

    implementation"android.arch.work:work-runtime:1.0.0-alpha01"

    implementation"android.arch.work:work-firebase:1.0.0-alpha01"

    使用

    首先我们要创建我们的任务类。

    doWork会在条件满足的时候触发。

    再来看看怎么定义触发规则并把任务添加到WorkManager中。

    对,添加到Data的数据不能大于10KB,本来我也以为是10M(火星换算法10240KB=10KB),但是我的数据才十几KB,怎么会超出范围,然后从源码中发现:

    可能作者跟大家开了个玩笑。大家跟着笑就行了。哈哈

    链式任务

    有些时候任务执行前后顺序会影响到结果,需要顺序执行某些任务,又或者后面的任务需要使用前面任务得出的结果,这个时候我们就可以使用链式任务。

    1、ABC先后执行

    WorkManager.getInstance().beginWith(A).then(B).then(C).enqueue();

    2、A,B没有先后顺序,但是A、B均为C的前驱任务

    WorkManager.getInstance().beginWith(A,B).then(C).enqueue();

    3、A、B和C、D链式执行,执行完之后在执行E

    WorkContinuation workContinuation1 = WorkManager.getInstance().beginWith(A).then(B);

    WorkContinuation workContinuation2 = WorkManager.getInstance().beginWith(C).then(D);

    WorkContinuation workContinuation3 = WorkContinuation.combine(workContinuation1,workContinuation2).then(E).enqueue();

    强大的生命力

    WorkManager有着强大的存活能力,当我们断网的时候打开app,这个时候任务没有满足触发条件,退出app(进程没有被清除)。这时候连上网络依然会执行任务。

    但是当我们结束进程就会出现下面的情况。

    我们进行下面的操作。

    1、断开网络

    2、打开app,这个时候不会执行

    3、杀掉应用进程

    4、打开网络,第一次的任务没有执行

    5、打开app

    然后会发现,任务执行了两次。第一次的执行是第一次运行后,加入了任务队列,但还没有执行的任务。

    第二次执行是我们第二次打开,因为满足网络连接条件立即执行。

    这是 WorkManager 的另一个特点,一旦发起一个任务,任务是可以保证一定会被执行的,就算退出应用,甚至重启手机都阻止不了他。但可能由于添加了环境约束等原因,它执行的时间是不确定的。

    原理我们利用网上的一个图片说明。

    当应用正在运行时,它会在当前的进程中启用一个子线程执行。应用没有运行的情况下启用,它则会自己选择一种合适的方式在后台运行。具体是什么方式和 Android 的版本和依赖环境有关

    相关文章

      网友评论

          本文标题:WorkManager :为我们执行后台任务提供了一站式解决方案

          本文链接:https://www.haomeiwen.com/subject/iskxcctx.html