Activity定时任务

Activity定时任务

作者:邓家海

傻逼一样的去坚持,就会有牛逼的结果

情景:

某公司有一个OA系统,审批环节是经理。有一天,经理出差了,然后下面突然有一份决定公司某个重大项目是否能顺利中标的决策需要呈批请示。但是刚好这个经办的员工不知道经理已经出差(或者这个呈批必须要经过经理审批的环节,没有跳过,也没有转发)。巧了,刚好这个经理出差的时候,没有委托任何人来办理这个事情。然后这个呈批就卡死在经理的环节上面没有人办理了。怎么办?问经理要密码?重新发起一个呈批?如果这样子做的话,说明这个OA系统的流程还不够灵活,需要管理员或者人工手动去协调系统。

 

方案:

那么我们可以设置Activity的定时任务。一旦超过这个办理的期限,那么,流程就会自动执行一些操作。下面我做的一个方案是一旦超过了办理期限,系统自动发送邮件提醒办理者。

 

要素:

(1)定时任务边界

(2)定时任务时间

(3)超时处理

 

Activity定时任务,需要启用JOB模块:

 

1   <!-- 定时任务 -->
2   <property name="jobExecutorActivate" value="true" /> 

这里如果设置为false,是不会触发定时任务的。

 

设计流程:

 

流程部分代码:

 1 <boundaryEvent id="sid-2C3A3C84-B2E4-4B29-A319-0AFBC17544F0" attachedToRef="sid-C8781FAE-02B8-4F8D-9A7D-A8AB4A8CB95A" cancelActivity="false">
 2
 3 <timerEventDefinition>
 4
 5 <timeDate>2016-06-04T15:03:00</timeDate>
 6
 7 </timerEventDefinition>
 8
 9 </boundaryEvent>
10
11 <serviceTask id="sid-F8D7E189-DB9F-49C2-87D6-D466398A889E" name="超时发送邮件" activiti:type="mail">
12
13 <extensionElements>
14
15 <activiti:field name="to">
16
17 <activiti:string>[email protected]</activiti:string>
18
19 </activiti:field>
20
21 <activiti:field name="from">
22
23 <activiti:string>[email protected]</activiti:string>
24
25 </activiti:field>
26
27 <activiti:field name="subject">
28
29 <activiti:string>待办超时</activiti:string>
30
31 </activiti:field>
32
33 <activiti:field name="text">
34
35 <activiti:string>你有一个待办任务已经超时。</activiti:string>
36
37 </activiti:field>
38
39 </extensionElements>
40
41 </serviceTask>

超时的时间设置(其中一种)

(1)需要设置经理节点

(2)设置超时任务边界的时间

 

说明:

(1)必须要设置一个时间,否则任务不执行

(2)取消活动为true,那么超时会直接取消这个流程活动,为false,不取消

(3)关于时间设置

Main config中的数据格式均为:ISO_8601格式:(P ,Y,M,W,D,T,.H,M,S)或 cron时间格式:

 

Iso_8601格式:

 

-----Time duration:延时多长时间后触发。例:P10D 表示10天以后触发

 

-----time date:什么时间触发。例:2011-03-12T12:12:23 表示在2011年03 月12日 12:12:23触发

 

      ---time cycle:循环规则:

 

R【循环次数】【/开始时间】/时间间隔【/结束时间】。

 

例:R3/PT10 表示重复3次,每次间隔10小时

 

  从2004年5月6日北京时间下午1点起时间间隔半年零5天3小 时循环,且循环3次,可以表示为  

R3/2004-05-06T130000+08/P0Y6M5DT3H0M0S。

 

以1年2个月为循环间隔,无限次循环,最后循环终止于2025年1    月1日,可表示为R/P1Y2M/2025-01-01

 

 

 

Cron 时间格式:seconds minutes hours day-of -mouth mouth,day-of-week year

 

其中*表示这个域上所有的合法值

 

例:0 * 17 * * ? 表示每天下午5点到5:59每分钟触发一次

 

?表示不指定该域上的值(只能用在日域或周域上,且不能同时在两 个域上使用,即假如在在其中的一个域上指定了值,必要再另一 个上放?)

 

,表示在某个域上指定一个值列表

 

例:0 10,44 14 ? 3 WEB  表示三月中每个星期三的下午2:10 和下午的2:44触发

 

- 表示在某个域上指定一个值范围

 

例:0 45 3-8 ? * * 表示上午3点到上午8点的45分时触发

 

m/n 表示某个域的值从m开始,按n递增

 

例:0/15 0/30 * * * ? 表示整点和半点时每15秒触发

 

L 表示某个域上允许的最后一个值(只能用在日域和周域上,用在 日域上时,表示当月的最后一天触发;用在周域上,表示周的最 后一天,即周六触发)

 

例:0 0 12 ? * 2L 表示每个月中的最后一个星期一的12:00触发

 

W 表示里指定日期最近的工作日(只用在日域上,其只能指定单天, 不能指定范围或列表)

 

例:在日域上指定15W,那么如果15号是工作日,就在15号 触发

 

如果15号是周六,就在14号触发

 

如果15号是周日,就在16号触发

 

# 表示月份中的第几周的哪一天(只用在周域上)

 

例:6#3 表示某个月的第三个星期五

 

最后执行:

Activity交流QQ群:634320089

关于邮件任务我之前已经说过,就不重复!

时间: 2024-07-30 10:19:29

Activity定时任务的相关文章

android开发步步为营之59:android定时任务之ScheduledThreadPoolExecutor

android定时任务有多种,1.Timer+TimerTask 2.Handler.postDelay   3.AlarmManager  4.ScheduledThreadPoolExecutor,前面3种比较常见,相信大家也经常使用,本文介绍采用多线程的ScheduledThreadPoolExecutor,它相比jdk 1.5的Timer的优点有几点:1.采用多线程,Timer是单线程,一旦Timer里面任何一个TimerTask异常的话,整个Timer线程就会停止 2.Timer依赖计

AlarmManager实现精准定时任务

在项目中,有这么一个功能点,app进程中,需要实现一个定时任务,只要设备处于开机状态,每隔半个小时,就需要定时向服务器上传一次位置信息,并且只要是有网络和获取到GPS信号,进程不能死,如果进程死掉了,需要自动重启.对该点进行细分梳理,包含如下几个小功能点: 1.进程能够实现开机启动. 2.进程需要一直存活,并且能够自动重启. 3.需要定时(30分钟)一次,向server端上报信息. 针对以上三个功能点,第1和2点,实现起来,都不难,唯独第三点,在实现时,一般情况,会考虑到多种方式实现.由于没有自

36.如何使用定时任务

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">      在app后台开发中,经常需要执行一些定时任务,例如,定期清理一下项目产生的垃圾文件啊,或者要某段时间,执行一些业务逻辑等等,都需要使用到定时任务.下面介绍一下常见的linux的定时任务和用开发语言实现的定时任务.</span> 1.    Linux定时任务Cro

Android定时任务

前言 我们在平常的开发中可能会遇到一些需求,比如说,每日定时提醒,定时更新数据等等,反正就是周期性任务,碰到这类需求,我们就可以叫做定时任务.以前我们可以通过使用线程Handler来实现,现在既然是在android手机里面,那就更加好办了,android给我们提供了一个AlarmManager这个玩意.它是一种系统级别的定时提示服务,并且可以运行在app的生命周期之外,还是比较强大的吧. 需求 假如说我们现在有个需求,就是每天早上7点要执行一个任务,并且每隔一段时间又会执行一次. 编码 首先肯定

Android下的定时任务

Android中的定时任务一般有两种实现方式,一种是使用JavaAPI里的Timer类,另一种是使用android的Alarm机制. 这两种方式在多数情况下都能实现类似的效果,但Timer有一个明显的短板,它并不太适用与那些需要长期在后台运行的定时任务.As we know,为了能让电池更加耐用,每种手机都会有自己的休眠策略:比如手机不用的时候智能的断开wifi连接,根据光纤强弱自动调节屏幕亮度,根据手机长时间无操作时自动的让CPU进入到休眠状态等,当进入休眠状态时,这就有可能导致Timer中的

android: 后台执行的定时任务

Android 中的定时任务一般有两种实现方式,一种是使用 Java API 里提供的 Timer 类, 一种是使用 Android 的 Alarm 机制.这两种方式在多数情况下都能实现类似的效果,但 Timer 有一个明显的短板,它并不太适用于那些需要长期在后台运行的定时任务.我们都知道,为 了能让电池更加耐用,每种手机都会有自己的休眠策略,Android 手机就会在长时间不操作 的情况下自动让 CPU 进入到睡眠状态,这就有可能导致 Timer 中的定时任务无法正常运行. 而 Alarm 机

android开发步步为营之61:android定时任务之Handler.postDelayed

/** * */ package com.figo.study; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * @a

[Android] Android 定时任务实现的三种方法(以SeekBar的进度自动实现为例)

一.采用Handler与线程的sleep(long)方法 二.采用Handler与timer及TimerTask结合的方法 三.采用Handler的postDelayed(Runnable, long)方法  布局文件: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.c

android Activity 的生命周期 以及横屏竖屏切换时 Activity 的状态变化

生命周期Android 系统在Activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情.例举了 7 个常用的钩子:protected void onCreate(Bundle savedInstanceState)protected void onStart()protected void onResume()protected void onPause()protected void onStop()protected void onRestart()protecte