activiti工作流数据库

2024-10-08 版权声明 我要投稿

activiti工作流数据库(共7篇)

activiti工作流数据库 篇1

(四)Spring和Activiti的整合配置讲解

Spring和Activiti的整合:

在Spring和Activiti的整合中ProcessEngineFactoryBean成为了两者的整合点。ProcessEngineFactoryBean为org.activiti.spring.ProcessEngineFactoryBean。提供了ProcessEngine的配置和创建的功能。

id=“processEngineConfiguration”class=“org.activiti.spring.SpringProcessEngineConfiguration”>

...

name=“processEngineConfiguration”ref=“processEngineConfiguration”/>

如果在包含事物的activiti配置如下:

xmlns:context=“http:///schema/context”

xmlns:tx=“http:///schema/tx”

xmlns:xsi=“http:///2001/XMLSchema-instance”

xsi:schemaLocation=“http:///schema/beans http:///schema/beans/spring-beans.xsd

http:///schema/context

http:///schema/context/spring-context-2.5.xsd http:///schema/tx

http:///schema/tx/spring-tx-3.0.xsd”>

id=“dataSource”class=“org.springframework.jdbc.datasource.SimpleDriverDataSource”>

id=“transactionManager”class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>

id=“processEngineConfiguration”class=“org.activiti.spring.SpringProcessEngineConfiguration”>

name=“processEngineConfiguration”ref=“processEngineConfiguration”/>

id=“repositoryService”factory-bean=“processEngine”factory-method=“getRepositoryService”/>

id=“runtimeService”factory-bean=“processEngine”factory-method=“getRuntimeService”/>

id=“taskService”factory-bean=“processEngine”factory-method=“getTaskService”/>

id=“historyService”factory-bean=“processEngine”factory-method=“getHistoryService”/>

id=“managementService”factory-bean=“processEngine”factory-method=“getManagementService”/>

id=“IdentityService”factory-bean=“processEngine”factory-method=“getIdentityService”/>

...工作流中Expressions的使用

在使用spring的SpringProcessEngineConfiguration时,如果没有beans属性表示所有bean都可以暴露给activiti的流程文件xml访问。如果配置beans但是没有配置map中bean信息,则没有暴露的bean。如果map中配置部分bean表示只是暴露部分bean给activiti使用。

id=“processEngineConfiguration”class=“org.activiti.spring.SpringProcessEngineConfiguration”>

...

暴露的bean可以在activiti的流程xml中使用。如下调用bean的方法

public class Printer {

public void printMessage(){

System.out.println(“hello world”);

}

}

自动资源部署(Automatic resource deploy)

id=“processEngineConfiguration”class=“org.activiti.spring.SpringProcessEngineConfiguration”>

...name=“deploymentResources”value=“classpath*:/org/activiti/spring/test/autodeployment/autodeploy.*.bpmn20.xml”/>

name=“processEngineConfiguration”ref=“processEngineConfiguration”/>

Spring和activit的整合测试

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(“classpath:org/activiti/spring/test/junit4/springTypicalUsageTest-context.xml”)

public class MyBusinessProcessTest {

@Autowired

private RuntimeService runtimeService;

@Autowired

private TaskService taskService;

@Autowired

@Rule

public ActivitiRule activitiSpringRule;

@Test

@Deployment

public void simpleProcessTest(){

runtimeService.startProcessInstanceByKey(“simpleProcess”);

Task task = taskService.createTaskQuery().singleResult();

assertEquals(“My Task”, task.getName());

taskService.complete(task.getId());

assertEquals(0, runtimeService.createProcessInstanceQuery().count());}

}

当在spring的配置中配置ActivitiRule时候,测试bean将自动被注入:

activiti工作流数据库 篇2

办公自动化 (OA) 系统能提高管理效率, 实现各部门之间的协同工作、资源共享和信息流转, 降低企业运行成本。常见的业务流程有请假、报销、评审、公文流转等, 这些流程可通过使用工作流技术来实现。本文以Activiti轻量级工作流引擎为核心, 将其引入到OA系统中, 减少业务人员对开发人员的依赖, 提高了效率, 方便了管理。

1 相关理论和开发技术

1.1 工作流和工作流管理系统

工作流就是为实现特定目标, 必须完成的任务序列及这些任务的执行过程, 它是业务流程的全部或部分自动化过程, 通过将相关工作活动分解为相应的任务、角色、规则和过程来执行和监控, 从而达到提升工作效率的目标。在流程中, 相关任务、信息和文档按照预设的原则从一个参与者流转到另一个参与者, 进行处理。简单地说, 工作流就是一系列相互衔接、自动进行的业务活动或任务。

工作流管理系统功能是:将相关人员、组织、资源设备、信息源 (例如DataBase、File System、Email、CAD等) 组合成整体, 这样, 工作流管理系统就成为一个理想的用来收容业务逻辑的业务仓库, 并使业务逻辑易于操作及控制。

1.2 SSH2框架

当前, 主流的JavaEE轻量级框架由Struts2、Spring、Hibernate组成, SSH2框架是中小型企业Java web应用程序开发较好的解决方案, 可降低各层之间耦合度, 减少开发复杂度, 缩短开发周期, 节省开发成本, 提升软件质量。采用轻量级框架要尽可能地采用基于POJO (简单Java对象) 的方法, 使应用不依赖于任何容器, 提高开发调试效率。另外, 轻量级框架绝大多数是开源的, 开源社区为框架提供了良好的设计、快速构建工具以及可供参考的开源代码, 有助于快速开发项目, 提高系统可扩展性、可维护性和处理效率[1]。

1.3 BPMN 2.0规范

BPMN 2.0规范定义了业务流程的符号及模型。为了实现流程定义可移植, 设置了转换格式。通过BPMN2.0规范可建立简单易懂的业务流程模型, 处理复杂度较高的业务流程[2]。BPMN 2.0规范对流程描述文件做了语法上的定义, 定义了XML规范, 流程描述文件可在不同的引擎中使用, 提供了平行、分流、决策、聚合等多种复杂的工作流程种类。

1.4 Activiti引擎

Activiti是轻量级的工作流引擎, 易于与Spring集成使用, 采用了宽松的Apache Licenece 2.0开源协议, 促进了Activiti BMP引擎和BPMN 2.0的匹配。Activiti在jBPM4项目之上进行构建, 延用了流程虚拟机 (PVM) , 企业的业务流程通过直观的业务流程语言来描述, 支持H2、SQL Server、Oracle、MySQL等数据库系统, 并可部署在任何应用服务器上。

Activiti核心组件包括:Activiti Engine (流程引擎) 、Activiti Modeler (基于Web的流程建模器) 、Activiti Designer (基于Eclipse插件的设计器) 、Activiti Explorer (基于Web的管理控制台) 、协作工具和Spring集成等。流程引擎与Activiti其它组件一起设计和实现流程管理解决方案, 可用于图形化建模、测试、部署BPMN 2.0的流程[3]。Activiti组件工具如图1所示。

2 基于Activiti的OA系统实现

2.1 系统总体架构

系统采用B/S结构, 使用Eclipse IDE作为开发平台, 选择Struts2+Spring+Hibernate组合的Web架构, 应用jQuery等开发技术, 并将Activiti工作流引擎整合到SSH2框架中。逻辑上划分为表现层、应用层和数据层, 当业务改变时, 只需改进流程, 无需修改系统, 系统总体架构如图2所示。

(1) 表现层是应用程序和用户交互的桥梁, 使用JSP和Struts2中的视图技术作为表现层页面, 结合Ajax实现业务流程, 应用与后台无关的前端jQuery框架, 用于创建前端界面, 支持多种平台的http访问。

(2) 业务层运行在开源的Tomcat服务器上, 包含Web控制、业务处理和数据访问3部分。Web控制采用Struts2实现, 处理用户的请求采用拦截器机制实现;业务处理采用轻量级Spring框架实现, Spring能够控制反转 (Ioc) 和面向切面 (AOP) , 容易实现Bean的装配和事务管理等特性。其中Activiti用于处理所有与流程相关的数据操作, 使用Service层控制事务属性, 通过Spring的AOP让Service层进行事务管理处理。数据库部署采用易于扩展的Dao层, Dao层将Hibernate的CRUD原子操作进行封装, 为业务层提供底层支持;数据访问由对象关系映射框架Hibernate实现, 封装底层细节, 屏蔽不同数据库异构问题。Activiti的流程引擎配置文件本身就是一份Spring配置文件, 将Activiti整合到Spring中一起使用。

(3) 数据层采用开源的MySQL数据库, 用来保存流程产生、执行及结束等环节中与之相关的各类数据。Activiti数据表的命名与服务API接口命名方法类似, 分为5大部分, 包括通用数据表、流程存储表、身份数据表、运行时数据表及历史数据表, 以ACT开头, 中间是1~2个字符的用例标识, 例如ACT_RE_*, RE代表respository, 表示流程定义存储;ACT_RU_*, RU代表runtime, 表示流程执行记录。

2.2 框架整合及系统实现

(1) SSH2框架的搭建整合。首先向项目导入对应jar包;其次把Struts2的Action、Hibernate的SessionFactory和DataSource整合到Spring容器中, 统一让Ioc管理;配置web.xml、struts.xml、applicationContext.xml文件[4]。

(2) jQuery与Struts2整合。从传输速率上考虑, 系统采用JSON数据格式把数据从后台传给前台。

(3) Activiti与Spring的整合应用。为了统一管理对象, 由Spring来处理流程的实例化, 为applicationContext.xml配置文件, 加入Activiti的流程引擎配置bean, 流程引擎bean和相关服务bean配置如下:

……

……

2.3 请假业务流程实例

在请假流程中, 员工需填写请假申请, 如果天数小于等于3天由经理审批即可;大于3天则需总监审批, 然后人力资源审批, 同意则完成申请, 不同意则调整申请。

(1) 绘制流程图。利用Activiti引擎实现, 可用Activiti Modeler, 也可用Activiti Designer, 绘制出符合BPMN2.0规范的请假审批流程定义文件[5], 如图3所示。

利用Activiti Modeler绘制相应流程图时, 会自动生成相应的BPMN2.0代码。

(2) 部署流程定义文件, 需将本机上的单个.bpmn20.xml文件上传, 或将流程图文件和含有格式的表单文件一起打包上传。利用流程引擎提供的RepositoryService接口将流程定义文件部署到Activiti引擎中, 关键代码如下:

ProcessEngine processEngine=processEngineConfiguration.createProcessEngineConfigurationFromResource

("activiti.cfg.xml") .buildProcessEngine () ;

RepositoryService repositoryService=processEngine.getRepositoryService () ;

Deployment deployment=repositoryService.createDeployment () .addClasspathResource

("diagrams/VocationRequest.bpmn20.xml") .deploy () ;//VocationRequest.bpmn20.xml为流程定义文件

(3) 启动流程实例。需要在工作流引擎中注入processEngine, 通过Activiti的API读取流程定义文件, 根据流程定义以及当前的任务状态, 判断是继续执行还是向下跳转, 启动请假流程代码如下:

ProcessDefinition pd=repositoryService.createProcessDefinitionQuery () .processDefinitionKey

("Vacation") .singleResult () ;//查找流程定义

Mapvars=new HashMap () ;//初始化任务参数

vars.put ("arg", vacation) ;

ProcessInstance pi=this.runtimeService.startProcessInstanceByKey (pd.getKey () ) ;//启动流程

调用Activiti的API启动流程并完成第一个任务后, 需要将请假记录保存到OA_VACATION表中, 使用ApplicationDao来完成, 调用Hibernate的API来实现数据的写入。

(4) 审核流程。不同的审核人登录后, 可以得到待办任务列表进行审核, 关键代码如下:

TaskServic taskService=processionEngine.getTaskService () ;

Listtasks=taskService..createTaskQuery () .processInstanceId (pi.getProcessInstanceId () ) .taskAssignee (userId) .list () ;

for (Task task:tasks) {

this.taskService.complete (task.getId () ) ;//完成审批任务

}

3 结语

本文通过探讨工作流技术, 选择当前开源领域流行的Activiti工作流作为研究对象, 整合Struts2、Spring、Hibernate三大开源框架, 将用户界面、业务逻辑和数据访问分离开来, 并在企业应用中整合Activiti, 让流程业务系统的耦合变得松散, 使系统结构清晰, 提升了业务流程管理的灵活性和方便性。以OA系统中的请假流程为例, 给出了核心实现代码, 业务流程的实现严格按照Activiti标准。与传统开发相比, Activiti消除了硬编码方式的工作流系统, 使业务人员可以独立进行流程设计, 提高了业务流程需求变化时的响应速度。

摘要:工作流技术是企业信息化的重要技术之一, 在办公自动化领域, 如何更好地处理流程运行过程中的相关环节, 提高企业运行效率, 是工作流管理方案着力解决的问题。介绍了工作流概念及BPMN 2.0规范, 分析了开源Activiti工作流引擎的体系结构和模块组件。系统总体架构采用SSH2框架, 选择Activiti对系统流程进行管理, 通过这种设计, 各个框架有效地结合在一起, 发挥了各自的优势。结合请假流程, 阐述了主要设计思路及实现过程。

关键词:OA系统,Activiti工作流,BPMN2.0,SSH2框架

参考文献

[1]高亮, 刘旸, 宗传玉.基于SSH2与JBPM的OA系统应用研究[J].微处理机, 2011 (8) :38-40.

[2]杨恩雄.疯狂Workflow——基于Activiti的工作流应用开发[M].北京:电子工业出版社, 2014.

[3]何佳.基于Activiti5的Web管理控制台的设计与实现[D].昆明:昆明理工大学, 2012.

[4]许爱军.JBPM工作流管理系统的研究与实现[J].计算机技术与发展, 2013 (12) :100-104.

activiti工作流数据库 篇3

2013年12月15日,在深圳福田边防足球场上一场全国飞盘狗联赛正在激烈上演。搭档一声令下,狗狗变身成离弦之箭,百米冲刺的速度去追赶飞盘,还要在落地前用嘴接住。来自北京,上海,深圳本地共50多位选手参加了比赛,参赛狗狗当中接近90%都是边境牧羊犬,它们需要在规定的时间当中,以距离,方位,动作等各方面赢得裁判的芳心。最终,来自深圳的边境牧羊犬hugo以101分获得了这场比赛的冠军。

桥舍画廊举办“日常·浮光”王岱山小幅油画展

“日常·浮光-王岱山小幅油画作品展”在深圳华侨城桥舍画廊展出,展期从2013年11月29日持续至12月28日。王岱山曾经于2010年在北京桥舍画廊举办“日常·叙事——小幅油画展”,2011在上海刘海粟美术馆举办“凝视的目光——王岱山油画作品展”。评论家认为,王岱山的绘画描绘的都是日常生活小景,室内,或室外,甚至是微不足道的角落。但在王岱山的绘画中,这些平常的小景却有着某种神奇的魔力,吸引人们的目光。这种神奇的魔力来自哪里?光,正是光破碎了角落的平淡与平静。

蝴蝶结,有爱不孤单

11月23日下午两点,由北京蝴蝶结罕见病关爱中心、尹小龙文化工作室和公共频道彩虹心愿栏目组共同策划的“有爱不孤单蝴蝶结音乐会”在锦绣中华的榕园酒吧举办。著名音乐人小崇、吴佳玲、艺术家尹小龙和三度乐队共同助力蝴蝶结罕见病的宣传,让更多人了解这个特殊群体。

结节性硬化症,俗称蝴蝶结罕见病。因为患儿身上多出现蝴蝶状的结节而得名,是一种多系统受累的遗传病,主要表现为脑、眼睛、心脏、肾脏等多个器官的良性肿瘤,容易造成癫痫、发育迟缓和自闭症等。

当患有结节性硬化症的4岁女孩妞妞和其他伙伴一起表演完以她的故事为剧本的音乐剧《蝴蝶结,有爱不孤单》后,北京蝴蝶结罕见病中心的深圳理事袁碧霞小姐和大家分享自己的经历:“我自己就是患儿的家长,我女儿妞妇在出生52天时检查出有这个病。当时我非常难过和无助,因为在国内医院对于医治这个病的经验很少,在网上可以查到的资料也是很少。当初我决定和妞妞一起去面列这个困难的时候发现大家对这个病的了解是知之甚少,所以我觉得我们很孤单,有爱不孤单,希望所有的患儿及家庭都因为全社会的关爱看到未来,看到希望”。

据悉,此次还有深圳女子风筝队捐赠出的一批蝴蝶风筝和其他爱心人士手工制作的工艺品参与义卖,最后共筹得3510元,全部用于蝴蝶结罕见病的公众认知传播。

activiti工作流数据库 篇4

信托业务是指商业银行信托部门接受客户的委托,代替委托单位或个人经营、管理或处理货币资金或其他财产,并从中收取手续费的业务。

信托业务是以信用委托为基础的一种经济行为,带有一定的经济目的。即掌握资金(或财产)的部门(或个人),委托信托机构代其运用或管理,信托机构遵从其议定的条件与范围,对其资金或财产进行运用管理并按时归还。由于信托业务是代人管理或处理资财,因此,信托机构一要有信誉,二要有足够的资金。信托业务范畴含商事信托、民事信托、公益信托等领域。国际上的金融信托业务,主要是经营处理一般商业银行存、放、汇以外的金融业务,随着各国经济的发展,市场情况日趋复杂,客户向银行提出委托代为运用资金、财产,或投资于证券、股票、房地产的信托业务,与日俱增。国内的信托业务是经央行批准的金融信托投资公司可以经营业务,主要包括资金信托、动产信托、不动产信托和其他财产信托等四大类信托业务。

[编辑] 信托业务的分类

以信托关系成立的方式为标准划分:任意信托、法定信托;

以信托财产的性质为标准划分:金钱信托、动产信托、不动产信托、有价证券信托、金钱债权信托;

以信托目的为标准划分:担保信托、管理信托、处理信托、管理和处理信托; 以信托事项的法律立场为标准划分:民事信托、商事信托;

从委托人的角度对信托进行划分:个人信托(生前信托、身后信托)、法人信托; 以受托人承办信托业务的目的为标准划分:营业信托、非营业信托;

以受益人的角度对性拖的划分:自益信托、他益信托、私益信托、公益信托; 以信托涉及的地理区域为标准划分:国际信托、国内信托; 以业务范围为标准划分:广义信托、狭义信托; [编辑] 信托业务的种类

指定用途信托资金业务

指定用途信托资金系指由委托人交付信托资金予受托人时,对其营运范围加以指定。目前的业务种类包括:

(1)逐笔指示运用范围:委托人与信托机构签订信托合同,由委托人对信托资金之运用逐笔给予指示,委托人并按照合同给付信托手续费或其它相关费用。

(2)指定国外基金经理机构代为运用:委托人与信托机构签定信托合同,并指定将资金之运用委由特定之国外资金经理机构办理,而受托人通常都会事先与国外经理公司及保管机构签约。委托人应负担国内信托手续费及国外资金经理及保管费用。

(3)指定代为投资国内外基金学堂业务:委托人签订信托合同,委请受托人(信托机构)代为投资国内或国外基金学堂,委托人应负担基金的申购、赎回等各项费用及支付受托人信托管理费用。

证券投资信托业务

证券投资信托系基于风险分散原则,由具备专门知识、经验的人,将不特定多数投资人资金运用于证券投资,以获取资利得或股利收入。证券投资信托事业,系指经营下列业务之事业:

发行受益凭证募集证券投资信托基金;

运用证券投资信托基金从事证券及其相关商品的投资; 接受客户全权委托;

其它经中国人民银行核准的有关业务。

目前的证券投资信托业务种类包括:

普通股基金:全部或大部份基金资产投资于普通股。

债券优先股基金:全部或大部份基金资产投资于获利率稳定的债券或优先股,以求稳健。均衡型基金:基金资产分散投资于普通股、优先股及各种债券。

货币市场基金:基金资产主要运用于货币市场上高收益的短期票券,如国库券、商业票、银行定存单。

成长基金:以追求买卖证券的涨价利益所得为目标。收益基金:以获取股利收入为目标等。

财产权信托

管理层收购(MBO)

MBO(管理层收购)是指目标公司的管理层或经理层融资购买公司的股份,从而改变公司所有者结构、控股权和资产结构,进而达到重组目的公司并获得预期收益的一种收购行为。

MBO信托即是通过信托的方式实施MBO方案,由信托公司提供方案设计、融资、股权管理等全套服务。

员工持股信托(ESOP)

由同一企业员工组成员工持股会,以取得及管理自己公司股票为目的,每月固定由入会员工(委托人兼受益人)薪资所得中提存一定金额,加上企业依一定比例提拨奖励金一并交附受托人(信托机构),并由员工持股会代表人代表全体会员与受托人签订信托合同。由于员工持股信托委托人人数较多,每月所提拨的信托资金系以集合运用、分别管理方式,并以定期投资取得管理委托人所服务公司股票为目的,以分批投资、风险分散来追求稳定的投资报酬。由于该项业务有助于员工长期储蓄投资达到累积财富的目的,颇受劳资双方肯定。

股权信托

它是指委托人将其持有的某公司的股权移交给受托人,或委托人将其合法所有的资金交给受托人,由受托人以自己的名义,按照委托人的意愿将该资金定向投资于某公司,受托人因持有某公司的股份而取得的收益,归属于受益人即委托人自身或委托人指定的其他人。受益人取得收益的条件由委托人确定。股权信托中,如果受益人为企业的员工或经营者,则称员工持股信托或经营者持股信托。

股权信托可以信托的方式解决企业股权激励中的不规范做法,并作为专业的咨询机构为企业的股权激励方案提供建议。

债权信托

债权信托是以金融企业及其他具有大金额债权的企业作为委托人,以委托人难以或无暇收回的大金额债权作为信托标的的一种信托业务。它通过受托人的专业管理和运作,实现信托资产的盘活和变现,力争信托资产最大限度地保值增值。

抵押公司债信托

是公司债券债权人将作为债券发行抵(质)押物的实物资产上的担保权信托给信托公司,信托公司为受益人即全体债券债权人的利益,管理和行使担保权的一种外部财产管理行为。

表决权信托

表决权信托又称商务管理信托,是有价证券管理信托中的一种,是公司股东依据他们与受托人之间签订的表决权信托合同,在信托期间内将他们所持有的股份作为信托财产转移给受托人,由受托人集中行使股份上的表决权。其特点是将股东拥有的两个重要权力(获取红利,股息的权利和参与企业管理,行使表决权的权利)分离,单独使用。原股东享有除表决权以外的一切权利。而受托人在信托期内代表股东行使表决权,代为保管股票、处理公司事务、代转股息收入。

租赁信托业务

租赁就是租用他人的物件。现代租赁主要为设备租赁,企业为了进行设备投资而向租赁公司提出租赁所需的设备,租赁公司则代为融资,并根据承租企业的要求向供应厂商购进合适的设备后交付承租人使用,承租企业需按期交付租金。在租期结束时,承租企业可以有停租、续租或留购设备的选择权。现代租赁是出租、借贷行为和租赁合同的统称。

现代设备租赁集中的领域有:飞机、汽车、计算机、无线通讯设施、家具、工业机械与设备、医疗设备、办公用品、火车车厢、卡车及废物处理设施等。现代租赁已发展成为融资(硬件)兼有咨询、维修(软件)的一揽子综合服务的行业,因此更灵活方便,更能适应用户的各种需要。

租赁信托业务主要有以下几种形式:

1、融资性租赁。它是指当企业需要添置设备时,企业不是向金融机构直接申请贷款来购买设备,而是委托租赁公司根据企业的要求和选择代为购入设备,然后企业以租赁的方式向租赁公司租赁设备,从而使企业达到融通资金的目的。

2、经营性租赁。也称为操作性租赁,是指融资性租赁以外的其他一切租赁形式。它是指当企业需要短期使用设备时,可采取向租赁公司短期租赁设备,并由租赁公司提供维修等售后服务,这是一项不可撤消的、不完全支付的短期租赁业务。

3、节税租赁。它是指,这项租赁在税收上能真正享受租赁的待遇,即出租人有资格获得加速折旧及投资减税等税收优惠,并且以降低租金的形式向承租人转让其部分税收优惠,而承租人用于筹措设备的租赁成低于贷款购买成。

4、销售式租赁。也称为非节税租赁。这类租赁在考虑租赁以税收为基础的国家的税法上通常被当作分期付款交易来对待。

5、杠杆租赁。又称为平衡租赁,它是指一项采用“财务杠杆”方式组成的融资性节税租赁,出租人一般只需支付全部设备金额的20%-40%,即可在经济上(也仅仅在经济上)拥有设备的所有权,享受如同对设备百分之百投资的同等税收待遇。设备成中的大部分资金则通过以出租的设备为抵押,由银行、保险公司和证券公司等金融机构贷款解决,贷款人提供信贷时对出租人无追索权,其资金偿还的保障在于设备身及租赁费,同时需出租人以设备第一抵押权、租赁合同及收取租金的受让权作为对该项贷款的担保。

6、直接租赁。直接租赁是购进租出的做法,即由出租人用在资金市场上筹借到的资金,向制造厂商支付贷款,购进设备后直接出租给用户(承租人)。

7、转租赁。转租是租进租出的做法,即由出租人从一家租赁公司或从制造厂商租进一项设备后转租给用户。

8、售后租赁。指设备物主将自己拥有的部分资产(如设备、房屋等)卖给租赁公司,然后再从该租赁公司租回来的做法。这是当企业缺乏资金时,为改善其财务状况而采取的对企业非常有利的一种做法。

企业托管信托业务

企业托管是指企业法人财产权以契约形式部分或全部让渡,即作为委托方的企业财产权法人主体,通过一定的契约规定,在一定期限内按一定条件将企业法人财产的部分或全部让渡给受托方,从而实现财产经营权和处置权的有条件转移,并以此达到企业资产保值、增值的目的。企业托管在质上属于金融信托范畴,所不同的是托管职能主要集中于企业债权和物权的管理和处置,其直接目的在于有效实现资产的保值、增值。在金融信托的经济关系上,托管是通过契约形式而缔结的信托关系,体现着一种特殊的经济关系,即在托管关系中各方关系人之间的关系。就我国目前情况来看,托管的主要内容和具体方式可以归纳为:

接受国有资产管理部门或投资机构的委托,在一定期限内保证受托国有资产保值、增值为前提条件,决定托管企业的有关资产重组或处置方式; 按契约约定的条件和方式,在受托的有效期限内,由受托方分阶获得委托方有关资产处置权,最终实现受托资产法人主体的变更或消除; 受托方按约定条件接受委托方委托,进行受托财产的经营管理、代理、出售、拍卖; 受托方以接受受托企业全部或部分债务和职工安置义务为条件,无偿受让有关企业; 受托方按约定条件接受债权人的债权委托,并以相应的经营手使债权人得以兑现或改善。企业托管的具体模式主要有:委托代理模式、风险金抵押模式、期权模式和回购模式。[编辑] 我国信托机构可以经营的信托业务种类

信托业可以经营的业务项目依《信托投资公司管理办法》法可分为如下:

受托经营资金信托业务。即委托人将自己合法拥有的资金,委托信托投资公司按照约定的条件和目的,进行管理、运用和处分。

受托经营动产、不动产及其他财产的信托业务。即委托人将自己的动产、不动产以及知识产权等财产、财产权,委托信托投资公司按照约定的条件和目的,进行管理、运用和处分。受托经营法律、行政法规允许从事的投资基金业务,作为投资基金或者基金管理公司发起人从事投资基金业务。

经营企业资产的重组、购并及项目融资、公司理财、财务顾问等中介业务。

受托经营国务院有关部门批准的国债、政策性银行债权、企业债券等债券的承销业务。代理财产的管理、运用与处分。代保管业务。

信用见证、资信调查及经济咨询业务。以固有财产为他人提供担保。中国人民银行批准的其他业务。

上述项目,应报请主管机关分别核定,并于营业执照上载明。另外,信托投资公司可以依照《中华人民共和国信托法》的有关规定,接受为了下列公益目的而设立的公益信托:

救济贫困; 救助灾民; 扶助残疾人;

发展教育、科技、体育、文化、艺术事业; 发展医疗卫生事业;

发展环境保护事业,维护生态环境; 发展其他有利于社会的公共事业。[编辑] 信托业务的国际避税及其防范

信托是以信用为基础,以信托财产为核心,以委托人为一方,将其财产所有权委托给受托人一方,由受托人为指定受益人的受益而对此财产加以保管运用的财产管理制度。信托在法律上切断了委托人与其财产之间的所有权链条,受托人拥有信托财产的名义所有权,而真正的或享有利益的所有者是受益人。随着经济全球化的发展,避税地的繁荣,利用国外信托进行国际避税,成为富裕者逃避税收的重要手,许多国家尤其是发达国家已意识到国外信托造成的税收流失,加大了防范力度。我国实施《信托法》以来,信托业规范有序地发展,但我国没有针对信托业务的税收制度,信托财产的转移、处置和信托收益都游离于税收法律法规之外,如何防范利用信托进行国际避税是值得关注的重要问题。

一、滥用信托国际避税的可能性

目前,不同国家对信托法律地位的认识不同,相应对信托的税收处理存在很大差异,给利用信托进行国际避税提供了可能。一些国家承认信托的实体地位,这些国家将信托作为一个独立的纳税实体看待,建立信托可以使委托人合法地与其财产所有权分离,一般情况下纳税义务由受托人或信托身承担,委托人对信托财产及其收入不再负有纳税义务。例如,英国规定,受托人要就信托的全部收入纳税。从信托取得收入的受益人将该收入纳入其全年的应税总收入中,但可以获得受托人就该收入已纳税款的税收抵免。

还有一些国家不承认信托纳税主体地位,这些国家将信托视作向受益人输送信托财产及其收益的管道,由受益人对所分配的信托收益或所得承担纳税义务。澳大利亚、加拿大和美国规定,受益人在取得收入的当年,将信托收入包括在其总所得之中,按受益人适用税率、扣除对信托收入纳税;受托人只要就信托收入中没有分配的部分纳税。美国进一步明确,如果信托将收入累积起来不分配,则由信托就这些收入先纳税,到收入分配时,还要由受益人就受益人税率与信托税率之差补交税款。

滥用信托国际避税,是指高税国纳税人通过建立避税地信托,在法律上实现与信托财产所有权的分离,使这部分信托财产摆脱高税国居民管辖权的直接控制。纳税人既不要迁出高税国,也不要假移居,只要委托别人在某个避税地管理其资产和所得,就可以逃避所得税、遗产税及赠与税。承认信托实体地位的国家对信托的税收处理,给纳税人提供了国际避税的机会,纳税人很容易通过信托的方式实现所有权与纳税义务的分离,达到少交甚至不交税的目的。不承认信托纳税主体地位的国家,即使对受益人征税,也存在纳税人在避税地建立国外信托,将财产及其收益转移国外,进行国际避税的可能性。下面主要以美国为例,介绍信托国际避税及其防范的基方法。

二、滥用信托国际避税的基本方法

总体说来,滥用信托国际避税的手是,利用国外信托隐瞒资产和收入的真实所有权,或掩盖交易的实质,表面上将收益的所有权与其纳税义务分离,但纳税人实际上还控制着信托资产。具体而言,信托国际避税的方法包括:

1.利用国外信托转移财产。纳税人通过设立国外资产管理信托,将企业的机器、厂房、设备等虚设在信托中,造成纳税人不管理企业的假象。并通过国外多个信托实体进行多重信托,应税资产在多个信托间流动,由这些资产所产生的经营所得和利润收入,记在避税地的国外信托名下,规避国税收。

2.跨国公司利用自益信托隐瞒对关联公司的控制。自益信托是指以委托人自己作为受益人的信托方式。跨国公司建立自益信托,把自己所拥有的关联公司委托给避税地的信托机构进行管理。由于在受益所有人与关联公司之间插入了一个全权信托,信托机构就成了关联公司事实上的所有人,有效隐藏了该关联公司的真实所有权,也隐藏了可能产生的应税收入。

3.跨国公司将控股公司的股权转移给国外信托。跨国公司首先在避税地建立信托公司,然后将控股公司的股票交给信托公司拥有,由信托公司管理控股公司,信托的受益人为跨国公司身,以这种方式跨国公司可以隐瞒其对各地受控子公司的真实所有权。由受控子公司产生的所有利润,都归国外信托所有,跨国公司就可以避免因此而产生的税收。

4.通过信托规避遗产税、赠与税。富人往往在承认信托的避税地设立国外信托,将名下财产委托给信托进行管理,在信托契约中约定财产的处理方式。由于信托资产的保密性,可通过信托资产的分割将其财产转移到继承人或受赠人的名下。此时,财产的所有权归信托所有,在委托人去世后,所在国家将不能对国外信托控制下的财产征税,借此可以逃避有关国家的继承税、遗产税或赠与税。

三、防范信托国际避税的经验

为了防止纳税人滥用信托国际避税,各国要么在税法中规定针对信托国际避税的条款,要么单独制定针对信托避税的专项法规。各国防范信托国际避税的具体措施包括:

1.运用实质重于形式的原则。实质重于形式是重要的司法原则,指法律不承认形式合法而实质违背立法意图的行为或安排。该原则在防范信托国际避税上的应用,意味着对那些符合法律要求但没有充分商业理由的信托,将不予承认。

2.针对国外信托的特殊规定。美国于1970年通过税收改革法令,取消以前给予国外信托的各种优惠,如延缓课税、资利得减免税等。如果国外信托以美国人作为受益人,那么,将财产直接或间接转移给国外信托的美国委托人,被看作财产的所有者。对于向国外信托的支付,要在美国交纳预提税;向国外信托转移增值财产,要在美国交纳特别税。加拿大对于国外信托的税务处理是,将国外信托看作国内居民,由受托人和居民受益人共同对信托收入承担纳税义务。

3.完善国外信托申报制度,扩大申报范围。美国的国外信托申报制度将下列事件纳入申报范围:美国人创立的任何国外信托,财产向国外信托的转移,申报范围从信托人扩大到任何一个从国外信托直接或间接取得分配收益的美国人。加拿大将国外受托人必须提供信托资料的责任规定于加拿大居民身上,否则当加拿大居民接受信托收益时,有可能面临“未申报信托资产”价值10%的处罚。

4.限制向国外转移财产。如英国规定,在没有得到财政部允许的情况下,英国公司不能向避税地转移营业,违者将受到严厉的处罚。美国对公民、国内公司或合伙企业向国外信托转移财产避税,可以课以相当于财产调整后价值35%的特别税。

5.加大对滥用国外信托避税的审查力度。从1997年开始,美国国内收入局跟司法部联手采取全国行动,加大对滥用信托避税的查处。国内收入局对涉及信托申报表的审计,从1997年的567份,增加到2000年的4000多份,审计出滥用信托避税的金额从1997年的800美元,增加到2000年的4.67亿美元。

6.加大滥用信托国际避税的处罚力度。美国规定,滥用信托避税一旦被发现,除了要承担纳税义务外,还要交付利息和罚款,罚款等于滥用信托少交税款的75%.如果故意违反国内收入法典(IRC),投资者和信托发起人还要承担欺诈罚金和刑事责任,罚金最高达25万美元,刑期最长5年。此外,一个美国人如果没有申报其转移到国外信托的财产,或者没有申报从国外信托取得的收入,将被处于交易总价值35%的处罚。

四、对我国防范信托国际避税的建议

activiti工作流数据库 篇5

Campus Activities校园活动

Campus activities have been organized in many universities and colleges. These activities range from academic to recreational, such as academic reports, social consulting services, speech contests, poet’s club, painting clubs, singing and dancing groups, etc.

These activities provide students with two major advantages. First of all, they play a positive role in improving students’ studies. Due to their heavy schedules, students are often busy themselves with textbooks and seldom expose themselves to a colorful life. But the variety of the activities provides opportunities for them to relax themselves and enrich their minds and knowledge. In addition, the activities also serve students living in the “ivory tower” have little chance to get in touch with society. Now the activities open the door for participants to leave their classrooms and get to know society.

All this offers an important means for students to broaden their horizons. They believe with the right kind of guidance and help campus activities will continue to grow and flourish.

activiti工作流数据库 篇6

2015-07-30 12:10 631人阅读 评论(2)收藏 举报

分类:

Android应用开发(226)

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处!【http://blog.csdn.net/ouyang_peng】

如何管理当前的运行Activity栈,如何彻底退出程序,本文封装了一个Activity管理类,可以方便随时退出程序。

[java] view plain copy

1.import java.util.Stack;2.3.import android.app.Activity;4.import android.content.Context;5.6.public class ActivityManager {

7.private static Stack activityStack;8.private static ActivityManager instance;9.static {

10.instance = new ActivityManager();11.} 12.13.public static ActivityManager getInstance(){ 14.return instance;15.} 16.17./**

18.* 添加指定Activity到堆栈

19.*/

20.public void addActivity(Activity activity){ 21.if(activityStack==null){

22.activityStack=new Stack();23.}

24.activityStack.add(activity);25.} 26./**

27.* 获取当前Activity

28.*/

29.public Activity currentActivity(){

30.Activity activity=activityStack.lastElement();31.return activity;32.} 33./**

34.* 结束当前Activity

35.*/

36.public void finishActivity(){

37.Activity activity=activityStack.lastElement();38.finishActivity(activity);39.} 40./**

41.* 结束指定的Activity

42.*/

43.public void finishActivity(Activity activity){ 44.if(activity!=null){

45.activityStack.remove(activity);46.activity.finish();47.activity=null;48.} 49.} 50./**

51.* 结束指定Class的Activity

52.*/

53.public void finishActivity(Class cls){ 54.for(Activity activity : activityStack){ 55.if(activity.getClass().equals(cls)){ 56.finishActivity(activity);57.return;58.} 59.} 60.} 61.62./**

63.* 结束全部的Activity

64.*/

65.public void finishAllActivity(){

66.for(int i = 0, size = activityStack.size();i < size;i++){ 67.if(null!= activityStack.get(i)){ 68.activityStack.get(i).finish();69.} 70.}

71.activityStack.clear();72.} 73./**

74.* 退出应用程序

75.*/

76.public void AppExit(Context context){ 77.try {

78.finishAllActivity();

79.android.app.ActivityManager activityMgr=(android.app.ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);80.activityMgr.restartPackage(context.getPackageName());81.System.exit(0);82.} catch(Exception e){ } 83.} 84.}

======

下面从http://

17.*
weibo : @桥下一粒砂

18.*
date : 2012-7-8

19.*

20.*/

21.public class ActivityUtil { 22.23./**

24.*
title : 设置Activity全屏显示

25.*
description :设置Activity全屏显示。

26.* @param activity Activity引用

27.* @param isFull true为全屏,false为非全屏

28.*/

29.public static void setFullScreen(Activity activity,boolean isFull){ 30.Window window = activity.getWindow();

31.WindowManager.LayoutParams params = window.getAttributes();32.if(isFull){

33.params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;34.window.setAttributes(params);

35.window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

36.} else {

37.params.flags &=(~WindowManager.LayoutParams.FLAG_FULLSCREEN);38.window.setAttributes(params);

39.window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);40.} 41.} 42.43./**

44.*
title : 隐藏系统标题栏

45.*
description :隐藏Activity的系统默认标题栏

46.* @param activity Activity对象

47.*/

48.public static void hideTitleBar(Activity activity){

49.activity.requestWindowFeature(Window.FEATURE_NO_TITLE);50.} 51.52./**

53.*
title : 设置Activity的显示方向为垂直方向

54.*
description :强制设置Actiity的显示方向为垂直方向。

55.* @param activity Activity对象

56.*/

57.public static void setScreenVertical(Activity activity){

58.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);59.} 60.61./**

62.*
title : 设置Activity的显示方向为横向

63.*
description :强制设置Actiity的显示方向为横向。

64.* @param activity Activity对象

65.*/

66.public static void setScreenHorizontal(Activity activity){

67.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);68.} 69.70./**

71.*
title : 隐藏软件输入法

72.*
description :隐藏软件输入法

73.*
time : 2012-7-12 下午7:20:00

74.* @param activity

75.*/

76.public static void hideSoftInput(Activity activity){

77.activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);78.} 79.80./**

81.*
title : 使UI适配输入法

82.*
description :使UI适配输入法

83.*
time : 2012-7-17 下午10:21:26

84.* @param activity

85.*/

86.public static void adjustSoftInput(Activity activity){ 87.activity.getWindow().setSoftInputMode(88.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);89.} 90.91./** 92.*
title : 跳转到某个Activity。

93.*
description :跳转到某个Activity

94.*
time : 2012-7-8 下午3:20:00

95.* @param activity 本Activity

96.* @param targetActivity 目标Activity的Class

97.*/

98.public static void switchTo(Activity activity,Class targetActivity){

99.switchTo(activity, new Intent(activity,targetActivity));100.} 101.102./**

103.*
title : 根据给定的Intent进行Activity跳转

104.*
description :根据给定的Intent进行Activity跳转

105.*
time : 2012-7-8 下午3:22:23

106.* @param activity Activity对象

107.* @param intent 要传递的Intent对象

108.*/

109.public static void switchTo(Activity activity,Intent intent){ 110.activity.startActivity(intent);111.} 112.113./**

114.*
title : 带参数进行Activity跳转

115.*
description :带参数进行Activity跳转

116.*
time : 2012-7-8 下午3:24:54

117.* @param activity Activity对象

118.* @param targetActivity 目标Activity的Class

119.* @param params 跳转所带的参数

120.*/

121.public static void switchTo(Activity activity,Class targetActivity,Map params){ 122.if(null!= params){

123.Intent intent = new Intent(activity,targetActivity);124.for(Map.Entry entry : params.entrySet()){ 125.setValueToIntent(intent, entry.getKey(), entry.getValue());

126.}

127.switchTo(activity, intent);128.} 129.} 130.131./**

132.*
title : 带参数进行Activity跳转 133.*
description :带参数进行Activity跳转

134.*
time : 2012-7-17 下午10:22:58

135.* @param activity

136.* @param target

137.* @param params

138.*/

139.public static void switchTo(Activity activity,Class target,NameValuePair...params){ 140.if(null!= params){

141.Intent intent = new Intent(activity,target);142.for(NameValuePair param : params){

143.setValueToIntent(intent, param.getName(), param.getValue());

144.}

145.switchTo(activity, intent);146.} 147.} 148.149.150./**

151.*
title : 显示Toast消息。

152.*
description :显示Toast消息,并保证运行在UI线程中

153.*
time : 2012-7-10 下午08:36:02

154.* @param activity

155.* @param message

156.*/

157.public static void toastShow(final Activity activity,final String message){

158.activity.runOnUiThread(new Runnable(){ 159.public void run(){

160.Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();

161.} 162.});163.} 164.165./**

166.*
title : 将值设置到Intent里

167.*
description :将值设置到Intent里

168.*
time : 2012-7-8 下午3:31:17

169.* @param intent Inent对象

170.* @param key Key

171.* @param val Value

172.*/ 173.public static void setValueToIntent(Intent intent, String key, Object val){

174.if(val instanceof Boolean)

175.intent.putExtra(key,(Boolean)val);176.else if(val instanceof Boolean[])

177.intent.putExtra(key,(Boolean[])val);178.else if(val instanceof String)

179.intent.putExtra(key,(String)val);180.else if(val instanceof String[])

181.intent.putExtra(key,(String[])val);182.else if(val instanceof Integer)

183.intent.putExtra(key,(Integer)val);184.else if(val instanceof Integer[])

185.intent.putExtra(key,(Integer[])val);186.else if(val instanceof Long)

187.intent.putExtra(key,(Long)val);188.else if(val instanceof Long[])

189.intent.putExtra(key,(Long[])val);190.else if(val instanceof Double)

191.intent.putExtra(key,(Double)val);192.else if(val instanceof Double[])

193.intent.putExtra(key,(Double[])val);194.else if(val instanceof Float)

195.intent.putExtra(key,(Float)val);196.else if(val instanceof Float[])

activiti工作流数据库 篇7

1 Android应用程序的组成

Android是Google开发的基于Linux平台的开源移动操作系统。从架构上看, 分为应用程序层、应用程序框架层、Android本地库及运行环境和Linux内核层。一个通过Android框架所创建的Android应用程序[2], 有四种基本框架:

1) Activity:Android应用的最主要组成部分, 作为应用程序的界面框架, 负责动态的加载各种用户界面视图, 实现底层消息的传递等。2) Service:运行在Android应用后台的一种组件, 有两种最基本的功能, 一是执行长时间运行的耗时操作, 如音乐播放、网络下载等。另一功能就是组件间的交互。3) Broadcast Receiver:用于接收并处理广播消息, 不管是系统消息还是自定义消息。4) Content Provider:主要用于为其他应用程序提供数据, 这些数据可以保存在文件系统中。

2 Activity生命周期

当Activity处于Android应用中运行时, 它的状态由Android操作系统以Activity栈的形式进行管理[3]。Android操作系统跟踪所有运行的Activity对象, 它将这些对象放入Activity栈中。当一个新的Activity启动时, 处于栈顶的Activity (当前运行的Activity) 将会暂停, 而一个新的Activity则被放入栈顶。当这一新的Activity完成时, 它从栈中被移除, 而先前的Activity则又回到栈顶。随着不同应用的运行, 每个Activity都有可能从活动状态转到非活动状态, 也有可能从非活动状态转到活动状态[4]。

2.1 示例演示

为了使读者能够更好的理解Activity的生命周期作者通过一个简单的例子进行演示。这个例子非常简单, 总共两个Activity, FirstActivity和SecondActivity。这两个Activity当中都复写了Activity当中的七个生命周期函数。复写的内容也非常简单, 就是每个函数打印一句话。根据这些打印的语句输出的情况来判断这些函数在什么时候执行。这两个Activity的功能也非常的简单都是用于退出的按钮。其基本代码如下:1) FirstActivityonCreate ()

1) First Activity中on Create () 方法模块:

2) 复写的on Destory () 方法模块为:

3) 相应的First Activity中还包括其他另外5个Activity生命周期方法, 复写的代码同上, 其功能都是输出相应的语句。

4) 最后First Activity通过Intent来实现与Second Activity的通讯, 其代码如下:

5) Second Activity中模块与功能与First Activity的模块和功能完全类似在这里就不再赘述。

2.2 实验结果及分析

当程序启动时将会自动启动并执行FirstActivity, 此时的运行结果如图1所示, 此处将可以在DDMS的LogCat窗口中看到相应的输出语句为:FirstActivity—àonCreate、FirstActivity—àonStart、

FirstActivity—àonResume

这表明启动一个新的Activity时Android操作系统就会依次调用on Create () 、on Start () 、on Resume () 三个方法。

当应用程序启动SecondActivity的时, 运行结果如图2所示, 此处将可以在DDMS的LogCat窗口中看到相应的输出语句为:FirstActivity—àonPause,

SecondActivity—àonCreate、SecondActivity—àonStart、SecondActivity—àonResume,

FirstActivity—àonStop。

这表明当应用程序启动另一个Activity的时候, 先前的Activity就会调用on Pause () 方法, 这样先前的Activity就会暂停, 然后运行第二个Activity的on Create () 、on Start () 、on Resume () 三个方法, 最后再执行先前Activity的on Stop () 方法。从上我们可以知道, 当另一个Activity执行时, 当前的Activity将会收到暂停的通知, on Pause () 方法被调用。该方法被用来保存Activity状态的地方, 这样Activity被重新启动时, 就可以具有与其退出时有相同的状态。例如手机正在执行音乐播放的功能时突然间来了一条短信, 这样Android系统就会执行新的Activity, 显示“来了一条短信, 是否读取等信息”而原来运行的音乐播放的状态将被保存起来, 等短信操作完成之后Android就又会把原来播放音乐的应用程序读取出来、还原出来, 这样手机就继续执行播放音乐的Activity了。调用完Second Activity之后, 因为Second Activity是第一次被启动, 所以仍然会调用on Create () 、on Start () 、on Resume () 这些方法。当Second Activity界面将First Activity界面遮住, 即First Activity被停止并被转换为不可见阶段及后续的生命周期事件First Activity失去焦点时, 调用onStop () 方法。如果Second Activity界面没有将First Activity界面遮住也就是First Activity没有失去焦点, 这时就不会调用First Activity的on Stop () 方法了。

当点击BACK按钮回到First Activity时, 运行结果如图3所示, 此处将可以在DDMS的Log Cat窗口中看到相应的输出语句为:SecondActivity—àonPause,

FirstActivity—àonRestart、FirstActivity—àonStart、FirstActivity—àonResume,

Second Activity—àon Stop、Second Activity—àon Destory。

这表明当点击BACK按钮时, Android系统就会调用Second Activity的on Pause () 方法, 这样Second Activity暂停。然后运行First Activity的on Restart () 、on Start () 、on Resume () 三个方法, 最后先前的Second Activity调用on Stop () 和on Destory () 将Second Activity停止和销毁。

从上可知当点击BACK按钮时, Android操作系统就会调用Second Activity中的on Pause () 方法, 因为点击BACK按钮之后, 就相当于又启动了另一个Activity, 如此就会调用Second Activity的on Pause () 方法。然后调用First Activity的on Restart () 方法, 而不是First Activity的on Create () 方法, 这是因为First Activity并没有销毁, 所以不是调用on Create () 方法, 只需要将First Activity重新启动就可以了, 而不需要重新创建。然后再调用on Start () 、on Resume () 这样First Activity又处于可见状态了。然后再调用Second Activity的onStop () 方法, 这是因为此时SecondActivity被完全遮住了, 失去了焦点。SecondActivity转入不可见状态, 所以会调用SecondActivity的onStop () 方法。最后调用SecondActivity的onDestory () 方法, 这样SecondActivity就会被销毁了。被销毁后当我们再想调用SecondAc-tivity时, Android系统就又会调用SecondActivity的onCreate () 而不是onRestart () 了, 因为SecondActivity已经被销毁了, 不可能再重启。

由上述叙述我们可知Activity的整个生命周期流程如图1所示。

2.3 运行结果界面

备注:以上三图分别为图2、图3、图4。图2为启动First Activity, 图3为从First Activity启动到Second Activity, 图4为返回到前一个Activity。

3 归纳总结

前面作者通过一个实例对Activity的生命周期做了简单的介绍, 在这里进行归纳总结。

Activity的生命周期是从创建到销毁的过程, 归纳起来包括活动状态、暂停状态、停止状态、销毁状态四种。主要生命周期方法如下[5]:

on Create () :当一个Activity首次运行时, on Create () 方法被调用。并以Bundle的形式提供对以前存储状态进行访问。

on Start () :当Activity处于可见状态的时候就会调用on Start () 方法。

on Resume () :当Activity可以得到用户焦点的时候, 就会调用on Resume () 方法。

调用完上述三个方法之后就可以在Activity上进行操作了。

on Pause () :当另一个Activity执行时, 当前的Activity将会收到暂停的通知, 同时on Pause () 方法被调用。该方法被用来保存Activity状态的地方, 这样Activity被重新启动时, 就可以具有与其退出时有相同的状态。

on Stop () :当Activity被停止并被转换为不可见阶段及后续的生命周期事件时, 调用on Stop () 方法。

on Restart () :当重新启动Activity时, 调用on Restart () 方法。此时, 该Activity仍在栈中, 而不是重新启动一个Activity。

on Destory () :当一个Activity被销毁时, on Destory () 方法被调用。on Destory () 方法在下面两种情况下会被回调: (1) Activity完成自己的生命周期, 此时Activity就会调用on Destory () 方法, 这个Activity就会被销毁。 (2) Android操作系统由于资源占用原因, 将优先级比较低的Activity销毁, 此时调用on Destory () 方法。

4 结束语

随着Android技术的发展, 对于Android软件的开发也越来越多。而Activity作为Android应用程序最重要部分和最常用部分, Android程序的开发很大程度上就是对Activity的编写。故弄清Activity的各种运行状态和各个生命周期函数就显得比较重要了, 该文通过一个示例形象简洁的介绍了Activity的生命周期使读者能够清晰的理解Activity的生命周期和Android程序运行时各个方法的功能。

摘要:Activity是Android应用中最重要最常用的应用组件之一, 一直都是Android应用开发的一个重要组成部分。对Activ ity生命周期进行介绍的论文也有很多, 但大多都只停留在对其基本状态和周期函数进行简单的初步的介绍, 给读者一种“不识庐山真面目, 只缘身在此山中”的感觉。该文从全局出发通过一个简单的例子, 系统而全面的介绍了Activity的生命周期。使读者能够清晰的理解Activity的生命周期和Android程序运行时各个方法的功能以及何时调用。

关键词:Android,Activity,生命周期

参考文献

[1]李刚.疯狂Android讲义[M].北京:电子工业出版社, 2011:170-194.

[2]关晶鑫, 李永全.基于Android的手机购物终端系统设计[J].电子世界, 2013 (1) :107-108.

[3]张魏, 李卉.Android移动应用开发从入门到精髓[M].北京:人民邮电出版社, 2010:54-62.

[4]段琳.深入剖析Android Activity[J].中国新技术新产品, 2011 (6) :33-34.

上一篇:县商务局召开队伍建设年活动动员会下一篇:《认识水果》说课稿