1、bpmn的相关性
任务和网关是我们到目前为止了解的三个流元素中的两个:事情(任务)必须在特定的环境(网关)下完成。还有一个流元素:应该发生的事情(事件)。对于bpmn流程模型来说,事件的重要性不亚于任务或网关。我们应该从应用它们的一些基本原则开始。比如:
1、捕获事件并抛出异常。
2、启动事件、中间事件和结束事件。
捕获事件是具有定义触发器的事件。我们认为,一旦触发器被激活或触发,它们就会发生。作为一个智力结构,这是相对复杂的,因此我们通过调用它们捕捉事件来简化它。关键在于,这些事件会影响流程的进程,因此必须对其建模。捕获事件可能导致:
1、这个过程开始
2、进程或进程路径正在继续
3、当前正在处理的任务或正在取消的子进程
4、执行任务或子进程时使用的另一个进程路径
bpmn假设抛出事件是自己触发的,而不是对触发器做出反应。可以说,与被动捕获事件相比,它们是主动捕获事件。我们简称它们为抛出事件,因为是进程触发它们的。投掷事件可以:
1、在过程中触发
2、在流程结束时触发
因此,启动事件总是发生的事件。流程在启动之前不能触发事件。最简单的启动事件应用程序如图1.1所示。当事件发生时,流程启动。
图1.1:一旦事件1发生,流程就会启动。
注意:圆圈中的问号表示此事件可以分配给特定类型。到目前为止,我们还没有报道任何事件。下面几节将解释可能的事件类型。
不同的事件可能会触发流程,可以对其建模,如图1.2所示。每个事件触发自己的流程实例是很重要的。
图1.2:一旦事件1或事件2发生,流程就会启动。
另一方面,假设您希望对流程启动之前必须发生的几个事件进行建模。很多人会对这种情况建模,如图2.31所示。
图1.3:坏:技术上来说,这个模型会导致死锁
这是直观的,但不幸的是它是不正确的,而且很少有bpmn初学者理解为什么它是不正确的。原因是and merge不支持相关性,因此流程将无法识别这两个事件是关联的。我们会在后续的文章中详细介绍bpmn是如何提供解决方案的。
流程可能需要发生特定的中间事件,如图1.4所示。任务1完成后,必须在任务2完成之前发生事件1。使用令牌方法时,令牌会在事件1处等待,直到事件发生为止。只有这样,令牌才会继续,并启动任务2。
图1.4:在任务1之后,流程将等待,直到事件1发生。只有这样,它才能继续执行任务2。
注意:none事件(如2.2节中所解释的)不是捕获事件。它属于投掷项目。
我们如何表示一个进程必须等待两个事件?我们在图1.5中显示的是有缺陷的。任务1完成后,令牌继续并等待事件1发生。如果事件2发生时,令牌正在等待事件1,令牌将不会注意到它。更糟糕的是,如果事件1发生在事件2之后,令牌将继续,然后等待事件2发生。由于事件2已经发生,令牌将永远等待。
图1.5:顺序的中间事件只能一个接一个地被识别
因此,捕获事件的语义不是检查可能已经满足的条件,而是将捕获事件视为在发生后立即消失的临时信号。因此,流程只有在事件发生时恰好处于准备接收状态时才能处理该事件。在纯功能流程建模中,这些细节通常会被忽略,但是,在技术流程建模中必须遵循这些细节。
如果我们需要等待两个可能独立发生的事件,但是这两个事件必须在流程继续之前发生,那么我们将表示如图1.6所示的情况。
图1.6:使用并行网关同时等待多个事件
我们可以用bpmn建模附加的中间事件。它们不显式地需要等待,但它们确实会中断我们的活动,包括任务和子流程(稍后将讨论)。之所以附加这些中间事件,是因为我们将它们放置在想要中断的活动的边界上。在图1.7中所示的过程中运行的令牌的行为如下:
令牌移到任务1,相应启动。
如果在处理任务1时发生事件1,任务1将立即取消,令牌将通过异常流转移到任务3。另一方面,如果事件1没有发生,则将处理task 1,令牌将通过常规序列流转移到task 2。
如果事件1只在任务1完成后发生,那么它就不再重要。
图1.7:事件1取消任务1并启动任务3
由于中间事件不中断,附加的中间事件不必导致活动被取消。这听起来很尴尬,但很有用。令牌在图1.8中所示的process部分中移动,如下所示。
1、令牌移到任务1,相应启动。
2、如果在处理任务1时发生事件1,则克隆令牌。在第二个令牌移动到任务3时,任务1继续被处理,现在任务3也被处理了。这个过程甚至可能重复发生,也就是说,事件可能多次发生。每次出现都会导致另一个克隆标记。
3、如果事件1没有发生,任务1将完成,令牌将通过常规序列流转移到任务2。
4、如果事件1只在任务1完成后发生,那么它就不再重要。
图1.8:事件1的发生导致了task 3的启动,而task 1正在被进一步处理
进程触发抛出中间事件。这意味着在这样的事件中发生的令牌会触发它,然后立即继续。抛出事件不会导致活动被取消,这就是它们永远不能被附加的原因。它们只出现在序列流中。我们已经知道了none中间事件,该事件可用于将条目建模为已定义状态。这也是一个投掷活动。
在下面的部分中,我们将介绍使用bpmn时使用的事件类型。我们还将解释如何使用基于事件的网关对不同事件作出反应。事件类型有:
消息
计时器
错误
有条件的
信号
终止
链接
补偿
多个
平行
升级
取消
本文会持续更新,欢迎关注,技术支持: 盘古BPM
AMS主要功能:
AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。还负责启动或杀死应用程序的进程。
WMS主要功能:
为所有窗口分配Surface。
管理Surface的显示顺序、尺寸、位置。
管理窗口动画。
输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息。
PWS主要功能:
PMS 用来管理跟踪所有应用APK,包括安装,卸载,解析,控制权限等。
SystemServer也是一个进程,包括AMS、PMS、WMS等等。
zygote意为“受精卵“。Android是基于Linux系统的,而在Linux中,所有的进程都是由init进程直接或者是间接fork出来的,zygote进程也不例外。
App进程是用户点击桌面icon时,通过Launcher进程请求SystemServer,再调用Zygote孵化的。
①点击启动一个App,Launcher进程采用Binder IPC向ActivityManagerService发起startActivity请求;
②ActivityManagerService接收到请求后,向zygote进程发送创建进程的请求;
③Zygote进程fork出新的子进程,即App进程;
④App进程通过Binder IPC向sytem_server进程发起绑定Application请求;
⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。
备注:
Launcher,PMS,Zygote,App进程是三个独立的进程,相互通信就需要使用进程间通信机制。与Zygote通信是使用的socket通信,Launcher,PMS,App进程间使用的是Binder机制。
原理:软件根目录或程序数据目录下生成一个文件,有文件就表示运行过,没文件就表示没运行过。可以在启动子程序前,加一个文件检测,如果没有就生成。生成之后紧挨着你载入窗口的代码。如果有文件就代表启动过,不载入就行了。
用注册表也可以,一样的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)