2. Instrumentation #execStartActivity:Instrumentation类相当于一个管家,它的职责是管理各个应用程序和系统的交互,Activity都有此对象的实际引用,可以通过它监测系统与应用程序之间的所有交互。
3. ActivityManagerProxy #startActivity():发起了一次跨进程调用,ActivityManagerService是ActivityManagerNative的具体实现。
4. ActivityStarter ():主要负责处理Activity的Intent和Flags, 还有关联相关的Stack和TaskRecord。
ActivityStack.startActivityMayWait():获取Activity的启动信息,包括ResolveInfo和ActivityInfo,以及获取CallingPid和CallingUid;
ActivityStack.startActivityLocked():创建一个ActivityRecord;
ActivityStack.startActivityUnchecked():设置TaskRecord, 完成后执行ActivityStackSupervisor类团晌的resumeFocusedStackTopActivityLocked方法
5. ActivityStackSupervisor 和 ActivityStack :这里会判断进程是否存在和一些生命周期的方法
ActivityStackSupervisor#resumeFocusedStackTopActivityLocked()
-->ActivityStackSupervisor#resumeTopActivityUncheckedLocked():
-->ActivityStack#resumeTopActivityInnerLocked()
-->ActivityStackSupervisor#startSpecificActivityLocked()
6: ApplicationThread :IApplicationThread的直接实现,发起了一次跨进程调用
7: ActivityThread :会调用sendMessage,最后调用到mH.sendMessage(msg)
8: ActivityThread # performLaunchActivity ():会收集要启动的Activity的相关信息,主要是package和component信息,然后通过ClassLoader将要启动的Activity类加载出来搭磨。最后调用mInstrumentation.callActivityOnCreate()
9: Activity # performStart ():Activity的生命周期方法是通过Instrumentation类调用callActivityOnXXX方法最终调用Activity的onCreate等方法,调用时机为ActivityThread#performLaunchActivitiy()方法中。
一. 应用程序的MainActivity通过Binder进程间通信机制通知ActivityManagerService,它要启动一个新的Activity;
二. ActivityManagerService通过Binder进程间通信机制通知MainActivity进入Paused状态;
三. MainActivity通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就准备要在MainActivity所在的进程和任务塌枝锋中启动新的Activity了;
四. ActivityManagerService通过Binder进程间通信机制通知MainActivity所在的ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动 *** 作了。
Instrumentation : 监控应用与系统相关的交互行为。
AMS :组件管理调度中心,什么都不干,但是什么都管。
ActivityStarter :处理Activity什么时候启动,怎么样启动相关问题,也就是处理Intent与Flag相关问题,平时提到的启动模式都可以在这里找到实现。
ActivityStackSupervisior :这个类的作用你从它的名字就可以看出来,它用来管理Stack和Task。
ActivityStack :用来管理栈里的Activity。
ActivityThread :最终干活的人,是ActivityThread的内部类,Activity、Service、BroadcastReceiver的启动、切换、调度等各种 *** 作都在这个类里完成。
在一个流程流转的过程中,可能已经经过多个节点,或者正在停留在某个任务节点。那么我们如何直观的显示当前流程已经完成了哪些节旦模圆点,或者此时当前流程流转到了哪里?那么这里就用到了activiti提供的图片生成器ProcessDiagramGenerator。使用它可以对流程中的节点或者连线等进行高亮标识(也就是用模塌显著的颜色圈起来)后生成图片的输入流,当然也可以对流程图中各个节点的图标,字体之类进行设置。
如果默认的图片生成器满足不了我们的业务需求,比如我要求用户任务被标注高亮的时候颜色使用蓝色或者其他颜色,我想要图片中显示的字体是黑体、楷体?那么如果是这样应该怎么实现呢?
自定义类继承DefaultProcessDiagramCanvas,这里 业务需求是连线标注为蓝色 所以需要重写drawConnection方法, 只需要修改 当highLighted为true时,调用this.g.setPaint()参数为连线的颜色。
2. 扩展DefaultProcessDiagramGenerator,当initProcessDiagramCanvas时候,使用自定义的ProcessDiagramCanvas, 只需要修改initProcessDiagramCanvas方法中最后一行为创建我们自定义的initProcessDiagramCanvas
注意: 这里必须同时定义generateProcessDiagram方法,实码销现与DefaultProcessDiagramGenerator中的实现相同。如果不定义,程序依然会调用DefaultProcessDiagramGenerator中的generateProcessDiagram方法生成默认的DefaultProcessDiagramCanvas
3. 使用自定义图片生成器进行流程运转图的生成
- 生成结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)