看病预约资源银行信用证编号长度与传入长度错误是什么意思?

12580预约挂号显示记录未找到什么意思_百度知道
12580预约挂号显示记录未找到什么意思
我有更好的答案
即你的预约还成功,你的预约数据没有进入到挂号系统里面。在网络预约挂号系统中,因为网络故障、系统故障,有时候不可避免会出现这类问题。当出现这种情况时,应及时联系客服处理,让客服帮忙重新挂号,避免因为这个,导致影响了你的就诊。
采纳率:87%
有以下可能:1、你挂号成功,但是系统出现问题,延迟了记录显示;2、你挂号未成功,在你挂号过程中出现错误,导致挂号不成功。建议:为保险起见,建议你重新挂号。
本回答被网友采纳
可能是系统原因造成的,建议再挂一次号,如果还是挂不上,就去就医160上试试。
为您推荐:
其他类似问题
您可能关注的内容
预约挂号的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。今天,2018 年声名鹊起的拼多多将于下周向美国SEC提交赴美上市文件,冲刺美股,CEO黄峥对此表示“不予置评”...
站长热评 建站热点
周热评榜周点击榜
免费在线PDF编辑工具,集转换、生成、编辑于一体。
中文网站排行
叶根友字体主题下载
| | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | |
微信扫一扫深圳市妇幼保健院
欢迎光临深圳市妇幼保健院!
院长深圳市妇幼医学研究所所长妇科学科带头人主任医师,教授,医学博士博士研究生导师享受深圳市人民政府特殊津贴,毕业于上…
国家临床重点专科
广东省临床医学重点专科
广东省“十二五”中医重点(特色)专科建设项目
深圳市医学重点学科
上级主管部门
市政府部门网站
(C) 2015 深圳市妇幼保健院 版权所有
备案号:粤ICP备号苏州科技学院本科生毕业设计(论文)苏州科技学院 毕业设计(论文)题目基于 Android 的医院就诊预约 管理系统的设计与实现性 专 年 学 姓质: 业: 级: 号: 名:毕业设计毕业论文√计算机科学与技术 2011 级
李 辉 陶 滔指导教师二 O 一五年 苏州科技学院本科生毕业设计(论文)基于 Android 的医院就诊预约管理系统的设计和实现摘 要医院看病难的问题是当下热议的话题之一。预约挂号是患者寻诊问药的第一阶段, 如果能够提高预约挂号的效率,不仅能提高医院工作效率,同时可以减少患者的候诊时 间。预约挂号系统是基于 Android 操作系统的手机进行设计和研究的,实现在手机上完 成医院预约挂号功能。 系统基于 C/S 体系设计结构,客户端使用 Android SDK 开发工具,根据预约挂号业 务流程,提供用户注册登陆、预约挂号、语音提示等功能,服务器端支持管理员、医生 登录管理功能。 服务器和客户端间的通信采用 HTTP 协议和 JSON 格式进行的数据传输。 系统利用 Android API 提供的各种组件模仿 Windows8 操作系统的扁平化风格进行界面 设计,预约就诊时间精确到分钟,挂号成功语音提示,能够很好地满足用户体验,通过 技术手段解决患者看病难的问题。关键词预约挂号;Android SDK;扁平化;JSON 格式I 苏州科技学院本科生毕业设计(论文)Based on the Android's hospital management system design and implementation of the bookingAbstractThe problem of hospital medical difficulty is one of the hot topics.Appointment of patients seeking the first stage of diagnosis and asks the pharmacist, if we can improve the efficiency of appointment register, not only can improve the work efficiency of the hospital, at the same time, can reduce the waiting time of patients. The reservation registration system is based on the Android operating system for mobile phone design and research, realize the hospital booking registration functions on the phone. System based on C/S system structure design, the client uses the Android SDK tools, according to appointment registration business processes, providing registered users landing, registration, the voice prompt, etc., the server support administrators, doctors log management function. The communication between the server and the client is transmitted by HTTP protocol and JSON format.. System use the Android API to provide the various components of the imitation Windows 8 flat style interface design, schedule an appointment time, accurate to the minute, successfully registered the voice prompt, can well meet the user experience, through technical means solving the patient to see a doctor difficult question.KeywordsAndroid SDK; D Appo JSON formatII 苏州科技学院本科生毕业设计(论文)目录第 1 章 绪论 ................................................................................................................................................... 1 1.1 研究背景和意义 .............................................................................................................................. 1 1.2 国内外研究概况 .............................................................................................................................. 2 第 2 章 需求分析与总体设计 ....................................................................................................................... 4 2.1 系统业务流程 .................................................................................................................................. 4 2.2 系统功能需求分析 .......................................................................................................................... 5 2.2.1 Android 客户端 ...................................................................................................................... 5 2.2.2 web 医生端 ............................................................................................................................ 6 2.2.3 web 管理员端 ........................................................................................................................ 6 2.3 系统结构设计 .................................................................................................................................. 6 2.3.1 系统体系架构 ....................................................................................................................... 6 2.3.2 系统采用的设计模式 ........................................................................................................... 6 2.3.3 系统的技术方案 ................................................................................................................... 7 2.4 系统功能模块划分 .......................................................................................................................... 9 2.4.1 客户端功能模块 ................................................................................................................... 9 2.4.2 服务器端功能模块 ............................................................................................................... 9 2.5 功能模块设计 ................................................................................................................................ 10 2.5.1 注册登录模块 ..................................................................................................................... 10 2.5.2 用户 UI 模块 ....................................................................................................................... 10 2.5.3 数据传输模块 ..................................................................................................................... 10 2.5.4 数据处理模块 ..................................................................................................................... 11 2.5.5 数据存储模块 ..................................................................................................................... 11 第 3 章 数据库设计 ..................................................................................................................................... 12 3.1 数据库类型 .................................................................................................................................... 12 3.2 数据表设计 .................................................................................................................................... 13 3.2.2 医生表 ................................................................................................................................. 13 3.2.3 排诊表 ................................................................................................................................. 14 3.2.4 挂号表 ................................................................................................................................. 14 3.2.5 收藏表 ................................................................................................................................. 15 3.2.6 数据库整体 E-R 图............................................................................................................. 15 第 4 章 系统功能实现 ................................................................................................................................. 16 4.1 客户端 ............................................................................................................................................ 16 4.1.1 Activity 管理机制 ................................................................................................................ 16 4.1.2 HttpPost 网络访问实现 ....................................................................................................... 17 4.1.3 注册功能实现 ..................................................................................................................... 18 4.1.4 登陆功能实现 ..................................................................................................................... 20 4.1.5 预约挂号功能实现 ............................................................................................................. 23 4.1.6 我的医生功能实现 ............................................................................................................. 30III 苏州科技学院本科生毕业设计(论文) 4.1.7 最近预约功能实现 ............................................................................................................. 32 4.1.8 个人中心功能实现 ............................................................................................................. 33 4.1.9 语音提示功能实现 ............................................................................................................. 36 4.2 服务器端 ........................................................................................................................................ 37 4.2.1 管理员登陆 ......................................................................................................................... 37 4.2.2 医生登陆 ............................................................................................................................. 38 第 5 章 系统测试 ......................................................................................................................................... 39 5.1 数据库加密测试 ............................................................................................................................ 39 5.2 功能测试 ........................................................................................................................................ 40 5.3 性能测试 ........................................................................................................................................ 46 结 论 ........................................................................................................................................................... 47 致 谢 ........................................................................................................................................................... 48 参 考 文 献 ................................................................................................................................................. 49 附录 X 译文 ............................................................................................................................................... 51 活动 ............................................................................................................................................................... 51 附录 Y 外文原文 ....................................................................................................................................... 66 Activities ....................................................................................................................................................... 66IV 苏州科技学院本科生毕业设计(论文)第 1 章 绪论1.1 研究背景和意义近几年来,随着科技发展的日新月异,智能手机的功能也在不断的完善,比如大家 除了使用手机打电话、发短信、浏览网页、听音乐等基本功能,还可以利用手机转账, 炒股,订餐以及智能家居等强大的功能,如果说电脑的发展带来了第三次科技革命,那 么智能手机将必定带来第四次科技革命。 手机预约挂号就是这次科技革命的成果。 虽然科技在不断进步, 但是面对中国近 14 亿的人口情况下也无济于事,医院的就诊挂号一直是个老生常谈的问题,包括怎样做到 以病人为中心,将挂号、就诊、交费、取药的步骤统一管理,缓解病人挂号排长队、等 待时间长、缴费难等问题。使用手机预约挂号,患者不需要亲自前往医院,也就避免看 病的”三长一短”问题,能够轻松的查看医生个人信息、排班信息,根据个人情况选择 就诊时间和医生,完成预约挂号的服务,享受科技带来的便捷。 目前网络上可供下载的医院挂号 APP 不在少数,比如挂号管家、挂号助手、挂号 找我等等。但是很多 APP 要么是收费,要么操作起来很难上手,降低用户体验,还有 的只是简单实现了挂号功能,没有给出医生具体的排班情况,仍然需要患者现场确认时 间,可以说真正适合用户使用的一款软件并不是很多。 通过上述对问题的研究以及用户的真实需求,本次基于 Android 的预约挂号系统设 计和实现具体重要意义,大致包括以下几点: 一、减少患者挂号排队时间。 手机进行预约挂号,患者可以享受预约优先服务,即优先挂号、优先检查,使得患 者看病等待时间大大的减少。 二、挂号方便、准确、安全。 患者通过手机查看医生排班时间,依据自己的实际情况选择合适的时间就诊,可以 选择现场支付或者在线支付,现场支付需要凭预约号至指定窗口领号,而在线支付患者 只需凭预约号直接到医院的相关科室就诊。如果在规定时间没有前来就诊,挂号费会自 动返回到用户账户,安全可靠。 三、医院信息透明化。1 苏州科技学院本科生毕业设计(论文)医院信息通过一个平台对外共享,患者和有关部门能够监督医院工作动态。医院将 医生的预约挂号信息第一时间上传至网络,所有的患者可以及时浏览医生排班信息,保 证了预约挂号的公平、公正性,有效的改善病人对医院的信任关系。 四、提高医院的服务品质。 救死扶伤是医生必须具备的本质,医院应当更好的发挥为人们服务的态度,包括降 低患者的等待时间,医疗资源的合理分配,医院能够合理、有序的运行,成为广大患者 值得信赖的医疗单位。 五、增加医院的社会竞争力。 手机预约挂号工作的大力推广,不但可以减轻医院窗口挂号的人口流量,患者可以 第一时间得到医生的就诊,遏制病情拖延带来的危险,提升了医院的服务质量,同时患 者有需要会及时前来复诊,保障医院病人来源的保持和增长,这对于医院的改革和发展 是至关重要的因素之一。 六、平台开放性。在手机市场的激烈竞争中, Android 操作系统以强大的优势独树一帜。Android 操作 系统是基于 Linux 内核开发,开放源代码,开发人员可以定制系统。在平板电脑、智能手机等领域占有很大的地位,因此吸引了大量的移动终端厂商前赴后继的加入进来。本 次毕业设计的医院就诊预约挂号系统就是基于 Android 操作系统进行设计和实现的,面 向 Android 手机用户群。1.2 国内外研究概况自从上世纪 60 年代初,医院信息管理系统(HMIS)在很多发达国家就得到了大力 的发展和进一步的研究,70-80 年代美国的 HMIS 有了较大的进步,尤其是在解决医院预约挂号的问题上取得了累累硕果。在很多欧美国家,通常患者看病都需要先进行预约 挂号,除非急诊,很少有人直接到医院找医生,没有预约报告单医生无法进行接诊。患者看病具体步骤如下: 1)除急诊以外,先由社区家庭医生为患者诊疗,一旦认为有必要,会建议患者转 诊到专科医疗中心或专科医院治疗。 2)患者同意转诊,家庭医生联系专科医生,为患者开转诊单。 3)患者联系待转诊医院,电话预约就诊时间。 4)在预约的时间内凭转诊单及时前往医院就诊。2 苏州科技学院本科生毕业设计(论文)各级医生的工作分工明确,有条不紊的进行。医疗机构间建立的有效转诊制度,为 医疗质量提供了保障。和发达国家相比,我们国内的预约挂号在近几年发展也很迅速, 手机预约挂号服务在很多医院也进行了实施。在开展预约挂号服务的大部分医院,存在 数据不准确、 推广力度低等问题, 患者实际使用预约挂号软件的比例少, 医院看病的 “三 长一短”现状仍然没有的得到改善,对于用户失约和黄牛倒号卖号的现象,没有出台有 效的防范措施,相比国外的医疗水平仍然有很大的差距。国内医院预约挂号方式多种多样,主要分为以下几种: 一、窗口预约 病人需要花费很多时间前往医院,通过和工作人员交流,填写预约信息,但是由于 工作人员不能方便的了解患者的病史以及确定上次就诊的医生, 也就不能保证患者正常 预约到同一位医生进行诊疗。 二、电话预约 电话预约不需要患者到医院窗口挂号以及人工的方式填写预约的相关资料。 避免被 安排到不同医生的状况,但是对于很多初次使用该方式的患者而言,由于不熟悉语音系 统,将需要花费许多时间听系统将所有的就诊选项的代号播报结束才能做选择,并且一 旦输入错误,需要重新输入预约信息,耽误及时就诊时机。 三、网络预约 网络预约挂号是由医院相关部门建立的网站,通过互联网预约挂号的一种方式。网 络预约相比现场预约和电话预约,很好的避免患者拥堵现象。在年轻人中广泛使用,由 于很多老年人没有接触过计算机,也就很少采用这种方式。 四、自助挂号终端预约 患者通过在医院里的自动挂号终端进行预约,通常终端上有操作流程和方法,方便 患者完成挂号,但是需要患者到医院挂号终端排队使用。 五、公共服务平台预约 一些大型医院和通信运营商合作, 提供的公共预约挂号服务平台, 比如电信的 114, 移动的 12580。用户通过拨打服务电话预约,但是由于这类平台同时也提供了很多其他 的功能,所以用户经常会出现抢线,断线等状况。3 苏州科技学院本科生毕业设计(论文)第 2 章 需求分析与总体设计2.1 系统业务流程经过对网络上现有的大量预约挂号平台的研究和医院实地考察, 使用预约挂号客户 端到医院看病的总体流程一般需要经过如下几个步骤: 1)用户注册、登陆系统。 2)选择就诊的科室、医生、预约时间。 3)选择支付方式,提交订单。 4)系统给用户返回确认信息及预约码 5)用户选择窗口支付,提供预约码到医院指定窗口缴费并领取挂号单,凭挂号单 到门诊科室医生就诊;如果是在线支付,可直接凭预约码到门诊科室医生就诊。 6)根据专家医生开出的处方到收费窗口缴纳费用。 7)凭收据到药房取药。 8)离院。如果有需要可至医院进行复诊。 医院预约挂号流程具体详情如下图所示:图 2-1 手机预约挂号流程图4 苏州科技学院本科生毕业设计(论文)2.2 系统功能需求分析截止 2014 年年底,根据国际电信联盟公布的 ICT 报告数据显示,全球已经有超过 30 亿人使用互联网,而在这近 30 亿的人口中接近 2/3 的互联网用户来自发展中国家。 中国作为一个人口超过 13 亿的发展中国家,对互联网的依赖越来越大。全球信息化风暴给信息技术带来了翻天覆地的革新, 这也要求社会各行各业的信息化建设需要创新和 完善以满足时代的需求。医疗行业同样面临着这样的难题,包括怎样建设满足客观需求 的医疗信息化系统、 病人及时就医、 保护医院投资、 以及方便医院往后的扩张等等问题。 针对我国现有的医疗资源紧缺、分配不合理、工作效率低从而导致病人看病难,就诊不 及时的情况,医疗系统的信息化推广建设势在必行。大力推广医院预约挂号服务不但可 以减少医院的窗口服务压力,而且可以提前通知医生安排就诊,从而很好的提高医院的 服务质量,保障了患者及时就诊的权益,也避免了医院看病”三长一短”问题。 本次医院预约挂号系统是通过将病人预约的环节转移到手机上操作, 从而实现患者 可以不出家门和排长队,能够随时随地轻松挂号。通过上节对预约挂号系统业务流程的 分析,进行系统的需求设计。系统应具备如下功能。 2.2.1 Android 客户端 1)用户注册、登陆 用户填写注册所需相关资料,凭账户(即身份证号)和密码登陆系统。 2)个人资料修改 用户登陆系统后可以修改除身份证号码、姓名、性别以外的资料。 3)科室、医生及排诊信息查询 用户登陆系统后可以浏览科室、医生以及该医生的排诊详情。 4)订单提交 用户登陆系统,根据自己病情选择科室、医生,选择合适的时间就诊。用户提交订 单可以选择在线支付或者窗口支付,一旦订单提交成功系统会返回预约码,凭预约码到 医院就诊。 5)预约挂号记录查询及取消 用户提交订单成功后可以浏览挂号记录,如果有特殊问题可以取消挂号。如果用户 选择的是在线支付,系统应当在限定时间内将诊金返回到用户账户中。 6)医生收藏5 苏州科技学院本科生毕业设计(论文)用户可以收藏自己喜欢的医生,可以方便浏览该医生的排诊信息,能够及时挂号和 复诊。 2.2.2 web 医生端 1)医生登陆 医生输入员工编号以及密码登陆后台。 2)浏览挂号详情 医生登陆系统可以查看哪些患者选择了自己的排诊记录, 根据具体时间提前安排出 诊。 2.2.3 web 管理员端 1)管理员登陆 系统管理员输入账号以及密码登陆后台。 2)管理医生 管理员登陆系统可以查看所有医生、更新医生信息、删除以及添加新医生。 3)管理用户 管理员可以浏览用户注册填写的个人信息。 4)管理医生排诊 管理员可以浏览所有医生的排诊信息、添加、删除以及更新排诊记录。 5)管理患者挂号记录 管理员可以查看用户所有的订单记录, 包括用户、 医生信息, 以及预约时间等信息。2.3 系统结构设计2.3.1 系统体系架构 系统基于 C/S 模型,即客户端(Client)和服务器(Server)两层架构设计。通过分层设计,可以有效的降低系统设计的耦合度,减少客户端和服务器间的依赖性,设计人 员可以集中精力实现各自的模块, 只需要对外提供访问的接口, 同时可以提供安全认证。C/S 架构间的信息交互只需要通过一层,提高访问速度。 2.3.2 系统采用的设计模式 预约挂号系统采用了 MVC 设计模式,MVC 模式是软件开发过程中采用的一种架 构模式,它把软件系统开发分成了模型(Model)、视图(View)和控制器(Controller) 3 个部分。6 苏州科技学院本科生毕业设计(论文)1)视图层:提供软件和用户直接交互的图形界面。比如 JAVAEE 中采用 JSP 界面 显示数据,ASP.NET 的用户界面 aspx 等等,用户通过视图查看关心的业务数据,同时 用户提交的数据可以通过视图中的相关控件输入。Android SDK 开发能够很好的将视图 层分离,并以 XML 文件的形式放入“res/”目录中。程序开发人员能够方便的调用数据, 同时增加了程序的可读性,也有利于软件后期的维护和更新。 2)模型层:存放程序中调用的实体类以及处理程序的业务逻辑,包括对数据库的 操作、网络通信管理等。在 Android 中对应“src/”下的代码设计,具体可以分为实体模 型层和业务模型层。 3) 控制层: 用于接收用户的操作, 通过模型和视图的协作完成用户请求。 在 Android 开发中,用户点击视图上的按钮或者选项,控制器接受用户发送的请求,调用模型进行 处理,并更新视图。Activity 在 Android 中起着控制层角色,调用业务模型层处理耗时 操作,避免出现 ANR 导致系统奔溃。图 2-3-1 MVC 组件类型关系图2.3.3 系统的技术方案 1)客户端:前台开发环境使用 Google 提供的 Android SDK 开发工具。2)服务器:后台开发环境使用 MyEcplice 开发工具。3)数据存储技术:服务器端数据存储使用 JDBC 技术访问后台的 MySQL 数据库,进行数据操作;客户端数据存储使用 Android SDK 提供的 SharedPreferences 类,它是一 种通过创建 XML 文件进行轻量级的数据存储技术。7 苏州科技学院本科生毕业设计(论文)4)数据加密技术:使用 MD5 报文摘要算法对用户设置的密码进行加密存储,有效 的避免了使用明文存储敏感数据带来的安全隐患问题。5) 服务器和客户端交互技术: 用户点击按钮, 发送请求命令, 客户端通过 HttpCliet 接口,采用基于 Apache HTTP 协议,实现服务器与客户端的通讯,服务器接收客户端 发送的请求,通过调用 web.xml 中对应的 Servlet 进行相应的处理。其中,服务器与客户端使用 JSON 数据传输,JSON 是一种进行轻量级数据交换的格式,易于编写的阅读, 与传统的 XML 数据传输方式相比有着以下几点优势:(1)JSON 比 XML 体积小; (2)JSON 和 JavaScript 交互更加方便; (3)JSON 的速度要远远大于 XML; (4)JSON 的解析要比 XML 的解析要方便。 服务器与客户端数据通信传输技术实现,如下图所示:图 2-3-2服务器与客户端交互图6)图片缓存技术:客户端请求服务器的大量图片,如果线程没有进行优化处理, 可能出现图片无法正常显示、加载缓慢、内存溢出,甚至导致系统奔溃等等影响用户体 验的问题。Android 开源网站 GitHub 上提供了一个功能强大的异步加载大量图片的框 架 Android-Universal-Image-Loader 很好的解决了这个问题。 Android-Universal-Image-Loader 作为一个优秀的开源图片处理项目,支持网络图片 的异步加载、参数设置、缓存处理等技术,为开发人员提供了方便的接口。其主要的核 心功能如下: (1)支持 Widget 窗口部件; (2)支持多线程的图片加载; (3)支持图片加载过程中的监听; (4)提供内存和本地的双缓存技术;8 苏州科技学院本科生毕业设计(论文)(5)提供图片的个性化显示,如图片圆角处理已经渐变动画等的配置接口; (6)提供多样化的功能选项,包括线程管理,内存和 SDCard 卡缓存,参数初始化 工作等等。2.4 系统功能模块划分2.4.1 客户端功能模块 通过在已有的预约挂号业务基础上分析,从用户的角度进行系统设计,满足功能实 用、操作简单、运行流畅是设计的宗旨。系统客户端的整体功能划分如下表:表 2-4-1 预约挂号客户端整体功能表 系统 功能模块 注册 登录 记住密码 选择科室、医生、时间段 预约挂号 提交订单 医生收藏 我的医生 最近预约 继续预约该医生 个人资料修改 密码修改 电话预约 个人中心 退出当前账户 最近预约入口 我的医生入口 继续预约该医生 取消预约挂号 子功能 无 找回密码预 约 挂 号 客 户 端 系 统2.4.2 服务器端功能模块 预约挂号系统大量的信息处理以及数据存储工作是在后台服务器进行实现。 服务器 和客户端的交互采用即时通信模式,患者提交预约挂号成功,医生可以随时登陆后台浏 览挂号信息,同时系统管理员可以对数据库进行维护和数据更新。 系统的 web 端整体 功能需求如下表:9 苏州科技学院本科生毕业设计(论文) 表 2-4-2 预约挂号 web 端整体功能表 系统 用户类型 医生 功能模块 浏览待就诊信息 子功能 无 浏览医生信息 更新医生信息 管理医生 删除医生预 约 挂 号 后 台 系 统添加新医生 管理用户 管理员 浏览用户信息 浏览医生排诊记录 添加排诊记录 管理排诊信息 删除排诊记录 更新排诊信息 浏览挂号信息 无2.5 功能模块设计2.5.1 注册登录模块 注册登录模块提供用户登陆认证,只有注册成功的用户才可以进行预约挂号。用户 在注册时填写的身份证号码、 手机号码、 邮箱以及密码等信息需要通过正则表达式验证, 使用 MD5 报文摘要算法对密码进行加密存储。 2.5.2 用户 UI 模块 用户 UI 模块提供了和用户交互的界面,包括预约挂号、我的医生、最近预约、个 人资料等界面,用户可以通过浏览科室,查看在线医生,就诊时间段,进行快速预约挂 号,界面设计简洁,降低用户的学习成本。 2.5.3 数据传输模块数据传输模块包括客户端和服务器间数据实时传输、交互功能以及客户端不同 Activity 间的数据传递。客户端和服务器通过 HttpClient 进行通信,基于 Apache HTTP协议。多个 Activity 间数据传递采用了 Intent 意图传输机制以及利用 Application 实现一 些全局对象的存储、传输和处理。10 苏州科技学院本科生毕业设计(论文)2.5.4 数据处理模块数据处理模块包括服务器对客户端发送请求处理和客户端的数据解析。服务器端响 应客户端发送的 URL,对请求进行识别,调用 Servlet,将处理后的数据以 JSON 格式通 过网络返回给客户端,客户端接收数据后进行解析处理,同时服务器将相应的数据存储 在数据库表中。2.5.5 数据存储模块数据存储模块实现客户端和服务器的数据存储。客户端利用基于 Android SDK 的 SharePreferences 类进行存储。SharePreferences 是以键值对的方式来存储简单的数据, 使用 XML 文件保存到手机。服务器利用 MySQL 数据库,使用 JDBC 技术对数据库表 进行添加、删除、查询、修改等操作。11 苏州科技学院本科生毕业设计(论文)第 3 章 数据库设计3.1 数据库类型预约挂号系统的大量数据存储是在后台进行,客户端发送请求,服务器查询数据库 中的信息,将数据返回给客户端并以界面形式呈现给用户。根据不同模型的数据结构进 行数据存储和构建,可以将数据库分为层次型数据库、网状型数据库以及关系型数据库 三种类型。1)网状型数据库网状型数据库采用网状模型数据结构组织数据。DBTG(Data Base Task Group)系 统是网状型数据库的典型代表。网状模型一般需要满足以下两个条件的集合: (1)至少有一个结点没有双亲结点; (2)结点中可以有多个多余一个双亲结点。图 3-1-1网状模型的例子2)层次型数据库在网状型数据库出现不久,层次型数据库随即诞生。其中,最典型的层次型数据库 代表是 IBM 公司的 IMS(Information Management System)系统,它是采用层次模型的 数据结构进行数据存储的数据库。图 3-1-2层次模型的例子12 苏州科技学院本科生毕业设计(论文)3)关系型数据库关系型数据库是以行和列的形式进行数据存储,方便用户理解和操作,同时每个关 系模型页对应一张表,是现阶段开发人员使用最广泛、最受欢迎的数据库。ACCESS,Oracle,SQL Server,MySQL 都是典型的关系型数据库。系统的服务器端数据库设计采用了 MySQL 数据库。关系型数据库与其他两种类型 的数据库相比存在的优势如下:(1)容易理解:关系型数据库利用二维表进行数据存储操作,完全符合现实世界 中的逻辑概念,相比其他两种存储模型理解起来更加简单。(2)使用方便:程序员或者数据库管理员可以使用 SQL 语言对数据库进行操作, 也可以在图形界面上直接操作数据库。 (3)易于维护:关系型数据库具有严格的完整性约束,包括实体完整性、参照完 整性、用户自定义的完整性,同时可以使用主外键关联,有效的降低了数据冗余,避免 数据不一致的问题。3.2 数据表设计用户表记录用户的个人信息,包括姓名、性别、密码等字段,具体设计如下表所示:表 3-2-1 用户表序号 1 2 3 4 5 6 7 8字段名 id sex birthday realname telphone idcard password email字段描述 用户 id 性别 生日 真实姓名 手机号 身份证号 密码 邮箱数据类型 int varchar varchar varchar varchar varchar varchar varchar长度 50 50 50 50 50 50 50 50允许空值 否 否 否 否 否 否 否 否备注 主键 男或者女 例: 用户姓名 手机号码 身份证号码 不小于 6 位的字符 注册的邮箱3.2.2 医生表 医生表记录医生的个人信息,包括医生员工号、姓名,性别、科室、介绍等字段, 具体设计如下表所示:13 苏州科技学院本科生毕业设计(论文) 表 3-2-2 序号 1 2 3 4 5 6 7 8 8 8 医生表 字段名 d_id d_employeeID d_name d_grade d_sex d_department d_info d_image d_money d_password 字段描述 医生 id 员工号 姓名 医生职称 性别 所属科室 医生描述 头像 诊金 登陆密码 数据类型 int varchar varchar varchar varchar varchar varchar varchar int varchar 长度 50 100 50 50 50 50
50 50 允许空值 否 否 否 否 否 否 否 是 否 否 备注 主键 后台登陆账户 医生姓名 等级分类 男或者女 例:内科、外科 医生相关介绍 显示头像或者默认 按职称区分 后台登陆密码3.2.3 排诊表 排诊表用于保存医生的排诊记录, 每条记录包括医生编号、 就诊日期、 时间等字段, 具体设计如下表所示:表 3-2-3 序号 1 2 3 4 5 排诊表 字段名 p_id d_id p_date p_time p_selected 字段描述 排诊 id 医生 id 就诊日期 就诊时间 号源状态 数据类型 int int varchar varchar tinyint 长度 50 50 50 50 1 允许空值 否 否 否 否 否 备注 主键 外键 例: 例:9:00 1:已选;0:未选3.2.4 挂号表 挂号表保存患者的挂号信息,每条记录包括患者 id、医生 id、排诊 id、预约码、支 付状态等字段,具体设计如下表所示:14 苏州科技学院本科生毕业设计(论文) 表 3-2-4 序号 1 2 3 4 5 6 挂号表 字段描述 挂号 id 用户 id 医生 id 排诊 id 预约码 支付状态 数据类型 int int int int varchar tinyint 长度 50 50 50 50 100 1 允许空值 否 否 否 否 否 否 备注 主键 外键 外键 外键 系统返回预约码 1:已支付;0:未支付字段名 g_id u_id d_id p_id g_code g_payed3.2.5 收藏表 收藏保存用户的医生收藏记录,方便用户复诊预约操作。每条记录包括收藏 id、用 户 id、医生 id 字段,具体设计如下表所示:表 3-2-5 序号 1 2 3 收藏表 字段描述 挂号 id 用户 id 医生 id 数据类型 int int int 长度 50 50 50 允许空值 否 否 否 备注 主键 外键 外键字段名 c_id u_id d_id3.2.6 数据库整体 E-R 图 通过以上数据库表的设计,分析数据库的所有实体对象以及对象与对象之间的联 系,画出如下 E-R 图:图 3-2-6数据库 E-R 图15 苏州科技学院本科生毕业设计(论文)第 4 章 系统功能实现4.1 客户端4.1.1 Activity 管理机制 预约挂号系统的实现是基于多个 Activity 间的切换,因此 Activity 的管理工作至关重要。Activity 的一个生命周期是指从这个 Activity 启动一直到它被销毁的整个阶段, 并且在一个生命周期中, Activity 会经历多种的状态变化。 Activity 生命周期如下图所示:图 4-1-1 Activity 生命周期上图可以看出一个 Activity 在整个生命周期中的状态变换过程,但是当系统存在多个 Activity 的时候, 生命周期变得更加复杂, 不易管理。 Application 的生命周期比 Activity 长,当某个 Activity 被销毁时,Application 不会销毁,只有当任务栈中所有的 Activity 被销毁, Application 才会结束, 所以使用 Application 管理 Activity, 可以实现多个 Activity 间的数据共享,以及关闭应用中所有 Activity,安全退出整个程序。预约挂号系统设计利用自定义的 MyApplication 管理 Activity,并且 MyApplication 的对象是通过单例模式 创建,保证使用一个对象能够维护和管理多个 Activity。核心代码实现如下:16 苏州科技学院本科生毕业设计(论文)4.1.2 HttpPost 网络访问实现 网络访问在系统设计的多个模块中都有涉及,所以可以将网络访问功能单独来实 现,封装成一个通用方法,方便程序在任何需要的地方调用,同时避免相似功能的代码 进行重复编写工作,也为后期功能的扩展提供了公共的访问接口。核心代码如下:17 苏州科技学院本科生毕业设计(论文)在程序需要访问服务器的模块中,通过调用该方法,只需要传入对应的 URL 地址 请求参数。通过 EntityUtils.toString 方法获取响应参数,如果返回数据以”[“开头,表 明为 JSONArray 对象,属于正常响应,通过对 JSONArray 进行解析并显示在界面上。 4.1.3 注册功能实现 注册模块界面设计如下:18 苏州科技学院本科生毕业设计(论文)图 4-1-3注册界面用户填写注册信息,点击提交按钮,先验证注册信息是否完整以及格式是否正确, 最后通过 HTTP 网络协议将信息发送到服务器端进行处理,核心代码如下:19 苏州科技学院本科生毕业设计(论文)用户注册的信息使用正则表达式进行验证,只有验证通过才能够继续执行网络请 求。发送请求的核心代码如下:注册模块访问服务器 URL 、请求参数、响应参数如下表所示:表 4-1-3 请求 注册模块参数表 链接 请求参数 响应参数用户注册/UserRegisterServletparams:{ realname=xxx,sex = xxx,birthday = xxx,telphone= xxx,idcard= xxx, password= xxx, email= xxx }正常响应:success 异常响应:failed4.1.4 登陆功能实现 用户登陆模块界面设计如下:20 苏州科技学院本科生毕业设计(论文)图 4-1-4用户登陆界面登陆模块包括登陆验证、记住密码、忘记密码以及提供注册接口功能。1)登陆验证 用户填写账号密码,点击登陆按钮,与服务端数据进行用户认证。核心代码实现如 下:2)记住密码用户登陆时,如果勾选了记住密码选项,在重新登陆时不必再次输入密码,账户和 密码自动填写,同理,取消记住密码将不会自动填写。核心代码实现如下:21 苏州科技学院本科生毕业设计(论文)在用户忘记登录密码并且重新设置的情况下,记住密码应该是当前设置的新密码。核心代码实现如下:在登录 Activity 中,需要将获取的密码重新保存一下。3)忘记密码 用户忘记了登录密码,可以通过点击”忘记密码”重新设置,密码重置成功,使用 Intent 将新密码发送给登陆 Activity。22 苏州科技学院本科生毕业设计(论文)登陆功能访问服务器的 URL 、请求参数、响应参数如下表所示:表 4-1-4 请求 登陆模块功能 链接 请求参数 响应参数正常响应:success 用户登陆 /LoginServlet params:{ idcard=xxx, password= xxx} 异常响应:failed4.1.5 预约挂号功能实现 预约挂号模块是系统设计的核心部分,提供科室、医生以及选择预约时间功能。 1)科室选择 科室选择界面列出医院的科室分类信息,用户通过点击相应科室进行操作,界面设 计如下图:23 苏州科技学院本科生毕业设计(论文)图 4-1-5-1科室界面界面布局采用 GridView 网格样式控件,使用自定义的 Adapter 适配器填充数据。用户点击科室跳转至医生选择界面,核心代码实现如下:24 苏州科技学院本科生毕业设计(论文)2)医生选择 用户通过点击某个科室, 将跳转到显示这个科室所有医生的 Activiy。 界面设计如下:图 4-1-5-2医生界面该功能通过使用 listview 和 adapter 实现医生列表显示以及响应用户点击事件, 与科 室选择的功能实现类似,主要区别是在于医生数据是通过访问服务器获取。核心代码实 现如下:25 苏州科技学院本科生毕业设计(论文)获取所有医生访问服务器的 URL 、请求参数、响应参数如下表所示:表 4-1-5-1 请求 科室医生查询参数表 链接 请求参数 响应参数 正常响应: [{“doc_id”:xxx,”doc_empID”:xxx, ”doc_name”:xxx,”doc_grade”:xxx, ”doc_sex”:xxx,”doc_department”:x xx,”doc_info”:xxx,”doc_image_url ”:xxx,”doc_money”:xxx},...] 异常响应:failed科室医生查询/ DoctorServletparams:{ department=xxx}3)医生收藏点击医生选项进入该医生的详细界面,如下图所示:图 4-1-5-3收藏界面用户点击收藏按钮可以收藏该医生,再次点击可以取消收藏,核心代码如下:26 苏州科技学院本科生毕业设计(论文)收藏医生访问服务器的 URL 、请求参数、响应参数如下表所示:表 4-1-5-2 收藏模块参数表请求链接请求参数响应参数医生收藏/ LikedOrUnLikedServletparams:{ u_id=xxx,d_id=x xx, selected=xxx}取消收藏:unliked true 收藏:liked true4)浏览医生简介和排诊信息用户可以点击“简介”和“挂号”按钮实现界面切换,如下图所示:27 苏州科技学院本科生毕业设计(论文)图 4-1-5-4简介和挂号界面浏览简介和挂号信息功能类似,其中,排诊信息以网格形式显示,可以动态展开和 收缩,节省屏幕空间,利用 ExpandableListView 和继承于 BaseExpandableListAdapter 的 自定义 adapter 实现。获取服务器端的排诊信息核心代码如下:从服务器获取了所有的排诊记录,但是需要将同一天的号源归纳在一起,便于患者 浏览和选择,使用 TreeSet 实现该需求。设计如下:5)订单提交 用户点击某个号源,跳转至订单提交 Activity。界面设计如下:28 苏州科技学院本科生毕业设计(论文)图 4-1-5-5订单界面在选择支付方式时,如果用户选择了窗口支付,会直接跳转至订单详情界面;如果用户选择了”在线支付” ,将跳转至支付界面,如下图:图 4-1-5-6支付界面用户点击“确认支付”按钮,支付成功,跳转至订单详情界面。29 苏州科技学院本科生毕业设计(论文)图 4-1-5-7订单详情界面用户点击提交按钮,服务器端自动生成该订单,代码实现如下:提交订单访问服务器的 URL、请求参数、响应参数如下表所示:表 4-1-5-3 请求 订单提交参数表 链接 请求参数 响应参数订单提交/ InsertGuaHaoItemServletparams:{ u_id=xxx,d_id=xxx, p_id=xxx, g_payed=xxx}成功:success 失败:failed4.1.6 我的医生功能实现用户通过点击“我的医生”按钮,会进入医生收藏对应的 Activity,浏览所有收藏的医生。界面设计如下:30 苏州科技学院本科生毕业设计(论文)图 4-1-6我的医生查询收藏医生和选择医生功能类似,区别在于获取数据源不同,并且长按某个医生 可以删除这条收藏记录,功能实现如下:值得一提的是, 当收藏记录被删除, 数据源会发生变化, 相应的界面应该及时刷新, 所以需要向适配器对象发送通知。代码如下:长按删除某收藏医生访问服务器的 URL 、请求参数、响应参数如下表所示:31 苏州科技学院本科生毕业设计(论文) 表 4-1-6 请求 我的医生参数表 链接 请求参数 响应参数删除收藏医生/ LikedOrUnLikedServletparams:{ u_id=xxx,d_id=xx x, selected =false}成功:success 失败:failed4.1.7 最近预约功能实现 用户通过点击”最近预约”按钮,会进入预约 Activity。界面设计如下:图 4-1-7最近预约最近预约功能用于显示用户已挂号记录,包括医生信息、预约码、就诊时间等,同 时提供取消该预约和继续预约功能。核心代码实现如下:32 苏州科技学院本科生毕业设计(论文)查询挂号记录访问服务器的 URL 、请求参数、响应参数如下表所示:表 4-1-7 请求 我的医生参数表 链接 请求参数 响应参数获取挂号记录/GetAllOrderServletparams:{ u_id=xxx}成功:success 失败:failed4.1.8 个人中心功能实现 个人中心提供了最近预约、我的医生入口,也包括修改个人资料和密码,12580 电 话预约功能。界面设计如下图所示:图 4-1-8-1个人中心1)最近预约以及我的医生用户点击最近预约或者我的医生会跳转至对应的 Activity,为用户提供了多个程序 入口。核心代码如下:33 苏州科技学院本科生毕业设计(论文)2)修改资料以及密码用户通过点击修改资料或者密码选项,实现对应的操作。如下图所示:图 4-1-8-2个人信息修改修改个人资料和修改密码功能类似,用户填写新设置的信息,点击提交按钮,如果 输入信息格式正确,提交至服务器,提示修改成功。以修改个人资料为例,代码实现如 下:34 苏州科技学院本科生毕业设计(论文)用户修改个人资料访问服务器的 URL 、请求参数、响应参数如下表所示:表 4-1-8 请求 资料修改参数表 链接 请求参数 params:{ telphone=xxx, email=xxx u_id=xxx } 响应参数 成功:success 失败:failed修改个人资料/ UpdateUserInfoServlet3)12580 电话预约 用户可以通过该功能拨打 12580,进行电话预约服务,为患者预约挂号提供了多个 途径,如下图所示:图 4-1-8-3 12580 电话预约35 苏州科技学院本科生毕业设计(论文)电话预约功能的核心代码实现如下:4.1.9 语音提示功能实现 语音提示功能通过调用第三方手说 TTS 提供的 Jar 包,在用户预约成功时,给出语 音播报提示,使系统更加人性化。功能实现如下:1)创建 TTS 服务连接对象,重写接口方法2)绑定 bindService 和解绑 unbindService36 苏州科技学院本科生毕业设计(论文)3)调用服务接口方法,进行语音播报4.2 服务器端服务器端功能实现采用了 JSP、JDBC 以及 Servlet 等技术。在响应客户端的网络请 求方面,使用 doPost 方法返回数据而不用 doGet,原因如下: 1)doGet 方法存在安全隐患。用户输入 URL 参数会暴露在浏览器地址中。 2)doGet 方法请求 URL 地址的长度有严格限制且只能是字符串。为了方便对数据库的管理和维护, 实现了以管理员和医生两种用户类型登陆 web 端 系统对数据库的管理功能。4.2.1 管理员登陆图 4-2-1-1管理员身份登陆37 苏州科技学院本科生毕业设计(论文)系统管理员登陆后,可以进行添加或删除医生、浏览注册用户信息、修改和添加医 生排诊记录、查看患者挂号信息等操作。如下图所示:图 4-2-1-2管理员登陆成功4.2.2 医生登陆图 4-2-2-1医生身份登陆医生登陆后,可以浏览已经被预约的号源,提前安排就诊,点击右侧超链接可以检 查自己详细的排诊信息,以便发现问题能够和管理员及时沟通。如下图所示:图 4-2-2-2医生登陆成功38 苏州科技学院本科生毕业设计(论文)第 5 章 系统测试软件测试工作贯穿在设计的每个阶段, 在系统开发的整个过程中占有非常重要的地 位。 进行严格的软件测试不但可以及时更正软件已经存在的错误和发现未检测出来的错 误,保证软件的质量,而且在很大程度上也的降低了系统的开发风险和投资成本。开发 人员可以根据系统开发规则说明以及程序业务逻辑设计不同的测试用例进行软件测试, 通过与预期输出结果对比,验证系统是否正常运行。本次预约挂号系统采用了功能模块 测试, 在实现每个功能的同时完成对该功能的测试, 这样做不仅有效地节约了开发时间, 同时保证了系统的稳定性和正确性。5.1 数据库加密测试用户在注册时设置登陆密码,经过 MD5 报文摘要算法加密,将加密后的数据保存 至服务器端数据库。图 5-1-1注册测试查看服务器存储数据表,用户注册的密码以密文的形式存储,如下图所示:图 5-1-2数据库用户表39 苏州科技学院本科生毕业设计(论文)5.2 功能测试1)登陆 填写账户和密码→用户登陆图 5-2-1登陆测试2)忘记密码 注册身份证号和手机号和→设置新密码→重置成功图 5-2-2密码重置测试40 苏州科技学院本科生毕业设计(论文)3)预约挂号选择科室→选择医生→选择时间→提交订单图 5-2-3预约挂号测试41 苏州科技学院本科生毕业设计(论文)4)我的医生 收藏医生→浏览医生→选择医生→挂号 ↓ 取消收藏图 5-2-4我的医生测试42 苏州科技学院本科生毕业设计(论文)5)最近预约 浏览预约→选择医生→继续预约 ↓ 取消预约图 5-2-5我的医生测试43 苏州科技学院本科生毕业设计(论文)6)个人资料修改个人中心→个人资料→资料修改→提交图 5-2-6个人资料测试图 5-2-7数据库表7)密码修改 个人中心→修改密码→密码修改→提交44 苏州科技学院本科生毕业设计(论文)图 5-2-8密码修改测试8)扩展功能 预约挂号系统的功能需求在不断的扩大,所以在设计时保留了”专栏医生” , ”药品 查询”两个功能入口,在后期可以不断的完善。图 5-2-9扩展功能45 苏州科技学院本科生毕业设计(论文)5.3 性能测试手机预约挂号的发展前景是巨大的,也要求系统有着良好运行处理性能,因此,系 统具备高效的处理能力非常重要。 现从以下两个方面对系统的性能测试进行分析: 1)通过以上功能测试,可以看出预约挂号系统在设计时能够充分考虑到系统的功 能实用性、正确性、可扩展性。系统在升级、维护时候以影响最小、处理迅速、安全可 靠为原则,可以变动控制在一定范围内。系统提供全面的服务性能实时监测,做到问题 的及时发现和解决,保证系统性能流畅。 2)系统能够保证用户请求的及时响应。在测试环境下使用 Android SDK 提供的模 拟器进行并发性能测试,根据测试结果发现在平均 10 次连续挂号的情况下,客户端会 出现内存溢出问题,经过测试,发现由于每挂一次号平均需要关闭 5 个 Activity,因此 连续挂 10 次号需要关闭 50 个 Activity。 类似 Java 的虚拟机 JVM,Android 程序也拥有自己的虚拟机 Dalvik,它是用来管理 应用程序内存。Android 垃圾回收机制 GC 不会及时清理,当 Activity 被销毁后,其内存 引用并不会立即释放,而是根据回收算法进行内存计算,如果已经属于可回收对象,将 在下次回收的时候释放内存,否则会一直占用内存。 通过测试,发现了导致应用内存溢出的主要原因,即在 Activity 被销毁的时,它的 上下文 Context 对象的引用没有及时释放,仍然常驻内存。根据 Activity 生命周期,可 以通过重写 onDestory 方法,在销毁时进行内存释放并提醒 GC 及时进行垃圾回收。代 码实现如下:46 苏州科技学院本科生毕业设计(论文)结论通过两个多月的努力,毕业设计的任务也接近尾声。回顾这段时间,虽然付出了很 多汗水,也经历了许多困难,但是更重要的是有了很大的收获。 当指导老师下发开题报告,就开始查阅文献,搜集各类相关资料,并且也到当地医 院进行实地考察,完成系统的需求分析。我发现许多医院都有自己的一套体系,感到很 迷茫,我将这一问题告诉了指导老师,在老师耐心的讲解下,明确了自己的工作方向和 目标。 在系统功能开发阶段,遇到了很多的难题,比如系统的框架应该如何搭建,业务流 程怎样安排更加合理,以及如何从服务器端获取图片,并且对图片进行缓存处理怎么实 现等等问题,开发初期没有一点头绪。通过在实习期间的学习和锻炼,熟悉了商业软件 的开发流程,掌握了软件系统框架的搭建,也接触了一些 Android 开源框架。在本次系 统设计中就使用了 Android-Universal-Image-Loader 图片处理框架。 通过本次设计的代码 编写, 其实也是对大学四年学习的一个总结, 对 Java 面向对象的编程思想有了更深层次 的见解,同时提升了程序开发能力。 设计完成了基于 Android 的医院预约挂号系统的实现,并且最终通过了客户端和服 务器联网测试工作,也很好的支持用户体验,但是仍然存在很多问题需要解决,比如对 于用户失约的黑名单处理、网络延迟、快捷搜索、短信提示等问题,当然我会在后期工 作中不断完善和修改。 手机预约挂号得到广泛的使用,不仅能够合理分配医院的门诊流量,提高医院服务 质量,并且为患者第一时间的及时就诊提供了保障,无疑会受到更多人的青睐。47 苏州科技学院本科生毕业设计(论文)致谢大学生涯转眼即逝,在即将结束之际,我想对苏州科技学院、家人、老师和同学们 表达我由衷的谢意。 四年里,学校给了我学习专业技能的机会,父母在生活上的支持,老师孜孜不倦的 教诲,同学们的相亲相爱,都让我的大学时光充满了温情和欢笑,在此,我深表感谢。 毕业设计的顺利完成离不开老师和同学们的帮助, 其中我的论文指导老师陶滔老师 对我的关心和支持尤其重要。在遇到自己解决不了的问题时,我最先做的就是向陶滔老 师寻求建议,而陶滔老师每次不管多忙,几乎每周都会抽出时间找我面谈工作进度以及 安排计划。在设计的每个阶段都给予了我悉心的指导,向陶滔老师表达崇高的感谢。 同时,系统的实现也得到了实习期间的师傅王晨龙的技术指导,他在很多难题上给 了我解决思路和方案,在次深表感谢。 最后,我想再一次真诚地向所有帮助我的老师和朋友们表达我的感谢之情,谢谢你 们!48 苏州科技学院本科生毕业设计(论文)参 考 文 献赵阳, 夏景林. 预约门诊挂号模式和支持平台建设初探[J]. 中国卫生资源, 2 012, 15(6):482-483. 2 王勤帮. 浅谈医疗设备维修工作的现状及发展[J]. 宁夏科技, 2003, (5):3939. 3 陈亚光. 美国式”调动医生积极性”[J]. 中国医院院长, 2010, (18):90-91. 4 赵阳, 夏景林. 预约门诊挂号模式和支持平台建设初探[J]. 中国卫生资源, 2 012, 15(6):482-483. 5 钱毅. 基于 Android 的电力通信无线巡视终端的方案设计[J]. 电力学报, ):60-63. DOI:10.3969/j.issn.11.01.014. 6 熊凯. 数字医院中移动预约挂号系统架构的技术研究[J]. 才智, 2010, (22): 78-78. DOI:10.3969/j.issn.10.09.072. 7 艾兰虹. 基于 J2ME 与 J2EE 的移动预约挂号系统的设计与实现 [J]. 信息与 电脑 (理论版), 5. 8 苏玉成, 蒋昆, 王蕊. 医院自助综合服务系统建设策略[J]. 医疗卫生装备, 2 013, (6):91-92. DOI:10.7687/J.ISSN13.06.091. 9 郭蕊. 基于 B/S 结构的新闻发布系统[D]. 吉林大学, 2014. 10 赵珂. 基于 Android 移动终端预约挂号系统的设计与实现 [D]. 武汉理工大 学, 2013. 11 张琦. 医院网络预约挂号系统的设计与实现[D]. 天津大学, 2013. 12 陶国芳, 王维维, 陈欣, 等. 基于 Web 的医院远程预约挂号系统的设计 [J]. 福建电脑, 2003 (7): 30-31. 13 张松. 基于 .NET 技术的医疗预约挂号系统的设计与实现[D]. 黑龙江大学, 2 010. 14 赵阳, 夏景林. 预约门诊挂号模式和支持平台建设初探[J]. 中国卫生资源, 2 013, 15(6): 482-483. 15 师成虎. 区域性导医平台的建设[J]. 护理研究: 下旬版, 2010 (11): . 16 张雷. 分时段预约诊疗系统研究与实现[D]. 河北科技大学, 2013. 17 铉克. 数字化健康体检信息系统的开发与实现[J]. 2009. 18 崔立超. 基于 WEB 服务的预约挂号系统设计与实现[D]. 山东大学, 2010. 19 虞颖映, 辛均益, 胡海翔, 等. 国内外医院预约诊疗服务系统现状及发展策略 分析[J]. 医学信息学杂志, 2013 (3): 24-30. 20 王林林. 基于 Android 平台的集群通信系统终端软件的设计与实现[D]. 成都: 西南交通大学, 2012. 21 蒋志宇. 某三级综合医院门诊病人时间分布和预约诊疗服务影响因素研究 [D]. 复旦大学, 2012.491 苏州科技学院本科生毕业设计(论文)22 张钰. 基于 web 会展信息服务平台的设计与实现[D]. 北京工业大学, 2010. 23 郝圆媛. 面向统一挂号平台的门诊预约挂号系统设计与实现[D]. 天津大学, 2 012. 24 欧汝鹏. 浅析医院预约挂号系统的设计与实现[J]. 计算机光盘软件与应用, 2 012 (23): 173-174. 25 刘海英. 基于网络的电子政务数据集成平台及其实现[D]. 复旦大学, 2006. D OI:10.7666/d.y Deutsch R. Systems and methods for monitoring and controlling animal behavior[D]. US, 2014. 27 Shabtai A, Kanonov U, Elovici Y, et al. “Andromaly”: a behavioral m alware detection framework for android devices.[J]. Journal of Intelligent Information Systems, ):161-190. 28 Gibler C, Crussell J, Erickson J, et al. Androidleaks: automatically detecting potential privacy leaks in android applications on a large scale [J]. Lecture Notes in Computer Science, . 29 Conti M, Nguyen V T N, Crispo B. CRePE: Context-Related Policy Enfor cement for Android[J]. Lecture Notes in Computer Science, . 30 Hiroshi Ishiguro. Android science: conscious and subconscious recogn ition.[J]. Connection Science, ):319-332. 31 Li Z, Lu L, Wu Z, et al. Method for Scalable Analysis of Android App lications for Security Vulnerability[D]. US, 2013.32 Enck W. Understanding Android Security[J]. Security & Privacy IEEE, ):50-57. 33 Eliezerov I, Romem Y, Braude Z. System and method for mobile computi ng transmission on a network of data associated with a television display [D]. US, 2010. 34 Talha K A, Alper D I, Aydin C. APK Auditor: Permission-based Android malware detection system[J]. Digital Investigation, –14. 35 Wu Q. Designing a smartphone app to teach English (L2) vocabulary[J]. Computers & Education, 9.50 苏州科技学院本科生毕业设计(论文)附录 X译文活动一个 Activity(活动)是一个应用程序组件,它提供了一个可以和用户交互的屏幕, 例如打电话,照相,发短信,或者查看地图。每个 Activity 都被用一个窗口来绘制它的 用户界面。这个窗口一般都填充了屏幕,但是也有可能比屏幕小并且悬浮在另一个窗口 顶部。 一个应用程序通常由多个结构松散关联的 Activity 构成。一般来说,应用第一次启 动呈现给用户的 Activity 被指定为主 Activity。启动不同的 Activity 来执行不同的动作。 当每次启动一个新的 Activity,上一个 Activity 就会停止,但是系统会将这个 Activity 保 存在栈中 (回退栈) 。 当启动了一个新的 Activity, 它会被推送到回退栈并取得用户焦点。 回退栈遵循着”后进先出”原则,所以,当用户结束当前的 Activity 并且点击返回键, 它就会从栈中弹出 (并且销毁) 并且显示之前的 Activity (关于回退栈知识可查看” Tasks and Back Stack“) 。 当一个 Activity 由于启动另一个新的 Activity 而停止时,它会通过回调生命周期方 法来通知状态的变化。Activity 也许会收到几个回调函数的调用,这取决于它的状态变 化——系统是否要创建它,停止它,重新开始它,或者销毁它——每次回调为你在状态 变化的恰当时机执行特定的工作提供了机会。例如,当 Activity 被停止,你的 Activity 应该释放所有的大对象, 例如网络或者数据库连接对象。 当一个 Activity 重新开始时候, 你可以再次收集必要的资源并且继续执行被中断的动作。这些状态转移组成了 Activity 生命周期的一部分。 文档的其余部分讨论的基本是如何建立和使用一个 Activity,包括 Activity 生命周 期工作的完整讨论,所以你可以正确的处理多个 Activity 状态间的过渡。 为了建立一个 Activity,你必须建立一个 Activity 的子类(或者 Activity 存在的子类 的子类) 。 在你的子类中, 你需要实现当 Activity 在多个生命周期的状态间转换时系统会 调用的回调函数,比如当 Activity 被建立、停止、重新开始、或者销毁。最重要的两个 回调函数是:51 苏州科技学院本科生毕业设计(论文)onCreate() 你必须实现这个函数。 系统当建立你的 Activity 时候调用这个函数。 在你的实现中, 你应该初始化你 Activity 的必要组件。最重要的,你必须在这调用 setContentView()来为 你的 Activity 定义 UI 布局。 onPause() 系统作为第一个用户正在离开你的 Activity 的指示调用这个方法(虽然这并不总是 意味着 Activity 正在被销毁) ,你应该提交应该在当前用户会话中应该被保存的任何改 变。 在 Activity 之间和处理导致你 Activity 停止甚至被销毁的意外的中断间提供一个流 畅的用户体验,你应该使用一些其他的生命周期回调函数。所有的生命周期回调函数都 在之后的 Managing the Activity Lifecycle 中讨论。 实现用户接口 从 View 类中派生出来的视图-对象的层级关系为 Activity 提供 UI。每一个 view 在 Activity 的 window 内控制特定的矩形空间,并且回应用户交互。例如:一个 view 也许 是一个按钮,当用户触摸它的时候启动一个动作。 Android 提供许多现成的 view,你可以使用他们来设计和组织你的布局。”Widgets” 是在屏幕上提供一个可见的(并且可交互的)元素,例如按钮,文本域,复选框或者就 是一张图片的 view。”Layouts”是从 ViewGroup 派生出来的,提供了唯一的布局模型为 其子 view,例如线性布局,网格布局或者相对布局。你也可以继承 View 或 ViewGroup (或存在的其他子类)来建立你自己的 widget 和 layout 并且把他们应用在你的 Activity 布局中。 最通常的使用 view 定义布局的方式是在你的应用资源中使用 xml 布局文件。 这样, 你可以保持你自己的 UI 设计独立于定义 Activity 行为的源码,你可以通过布局的资源 ID 使用 setContentView()为你的 Activity 设置 UI 布局。你也可以在你的 Activity 代码中 建立新的 view, 通过往 ViewGroup 插入新 view 建立一个 view 层次结构, 然后通过传递 ViewGroup 的根到 setContentView()来使用那个布局。 关于创建用户 UI 的更多信息,你可以查看”User Interface“。 在 manifest 中声明 Activity。 你必须在 manifest 文件中声明你的 Activity,这样系统才能访问。为了声明你的52 苏州科技学院本科生毕业设计(论文)Activity,打开你的 manifest 文件并在&application&元素下添加子元&Activity&例如:&manifest ... & &application ... & &Activity android:name=“.ExampleActivity” /& ... &/application ... & ... &/manifest &你可以在这个元素中包含一些属性,来定义像是 Activity 的 UI 标签、图标或者样 式主题的属性。 android:name 是唯一的必选项,它指定 Activity 的类名。一旦你发布了你的应用, 你不应该更改这个名字,因为如果你这么做,你也许会破坏一些功能,比如应用的快捷 方式(阅读 blog 文章 Things That Cannot Change 此地址失效) 在 manifest 更多 Activity 配置参数请查看”Activity” 。 使用 intent 过滤器 一个&Activity&也可以指定多种 intent 过滤器 - 使用&intent-filter&元素 - 为了声明 其他应用组件如何触发它。当你使用 Android SDK 工具建立一个新的应用,工具会自动 为你建立包含一个 intent 过滤器的 Activity,它声明了 Activity 回应”main”动作并且应该 被放在”launcher”类目里。&Activity android:name=“.ExampleActivity” android:icon=“@drawable/app_icon”& &intent-filter& &action android:name=“android.intent.action.MAIN” /& &category android:name=“android.intent.category.LAUNCHER” /& &/intent-filter& &/Activity&&action&元素指定应用的”main”入口处。 &category&元素指定这个 Activity 应该放入系统 launcher 应用中列出。 (允许用户启 动这个 Activity)如果你打算只是在本应用使用此 Activity 而不允许其他应用使用,那 么你不再需要其他任何 intent 过滤器。53 苏州科技学院本科生毕业设计(论文)只有一个 Activity 应该有”amin”动作和”launcher”类目, 就像上面的例子那样。 然而, 如果你想要你的 Activity 响应从其他应用(和你自己的应用)发出的隐式的 intent,那 么你必须为你的 Activity 定义额外的 intent 过滤器。对于每一种你想响应的 intent,你必 须包含一个&intent-filter&,其包含&action&元素和一个可选的&category&,&data&元素可 有可无。这些元素指定你的 Activity 可以响应的 intent 类型。 关于 activities 如何使用 intents 的更多信息,你可以查看”Intents and Intent Filters “。 Intents 与 Intents 过滤器 Android 中的三个核心组件 activities,services,broadcast receivers 是通过 Intent 彼此联 系、触发的。Intent 是同一个或不同的应用中的组件之间的消息传递的媒介。Intent 本身 是一种?被动?的数据结构,它抽象地描述了即将被执行的动作又或是在广播中已经发生 的并且正在被通知的某个事件的描述。下面列出几种为每一种组件传递 Intent 的独立机 制: 1)Context.startActivity()或者 Activity.startActivityForResult()可以通过 Intent 启动一 个 activity 或者通过目前的 activity 去做新的事情(Activity.setResult()可以通过 Intent 把 信息传递给调用了 startActivityForResult()方法的 activity) 。 2)Context.startService()可以通过 Intent 初始化一个 service 或者传递指令给一个已 经工作的 service.相似的, Context.bindService()可以通过 Intent 在发起呼叫的组件和目标 service 之间建立连接。Intent 可以任意的初始化还没有运行的 service。 3)任意的广播方法 (例如 Context.sendBroadcast() , Context.sendOrderedBroadcast() 或 Context.sendStickyBroadcast())可以通过 Intent 把消息传递给 Broadcast Receiver。很多 广播事件发起于系统级别的代码。 在以上的每一种情况中,Android 系统都会找到合适的 activity,service 或者一套的 broadcast reicervers 去响应 Intent,必要的时候也可以通过 Intent 初始化他们。广播事件中 的 Intent 只是传递给 brodcast receivers.startActivity()只是把 Intent 传递给 activity,而不 是 service 或是 broadcast receiver,以此类推。以上我们知道这些传递消息的系统是没有 任何重叠的。 启动一个 Activity 你可以通过调用 startActivity() 来打开另一个 Activity,传递一个描述你想打开的54 苏州科技学院本科生毕业设计(论文)Activity 的 intent。这个 intent 要么显示指定你想打开的 Activity,要么描述你想执行的 内容的动作类型(并且系统为你选择恰当 Activity,甚至可以是其他应用中的 Activity) 。 一个 intent 也可以传递一些小数据来给要启动的 Activity 使用。当你在你自己的应 用中工作的时候,你会经常简单的需要启动一个已知的 Activity。你可以通过建立一个 intent,通过使用类名显示定义你想要打开的 acitivity 来做上面所说的事情。例如,下面 是一个 Activity 如何启动另一个名为 SignInActivity 的 Activity。Intent intent = new Intent(this, SignInActivity.class); startActivity(intent);然而, 你的应用也许也想使用你的 Activity 中的数据执行一些动作, 比如发送邮件, 输入消息,或者是状态更新。这种情况下,你的应用也许不会有它自己的 Activity 来执 行这些动作,所以,代替的是,你可以使用设备上其他应用提供的可以为你执行这些动 作的 Activity。这就是 intent 真正有用的地方,你可以建立一个 intent 来描述一个你想执 行的动作并且系统会从其他启动恰当的 Activity。如果有多个 Activity 可以处理这个 intent,那么用户可以选择一个来处理。例如,如果你想允许用户发送一封电子邮件,你 可以建立下面的 intent:Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);被添加到 intent 中的额外的数据 EXTRA_EMAIL 是一个收件人 string 数组。 当一个 电子邮件应用响应这个 intent 时,它读这个额外的 string 数组,并且把他们放置在电子 邮件形式构成的”收件人”中。这种情况下,电子邮件应用的 Activity 启动,当用户完成 邮件,你的 Activity 重新开始。 启动一个需要返回结果的 Activity 有时候,你也许想要从你启动的 Activity 中收到一个结果。这种情况下,调用 startActivityForResult()来启动 Activity (代替 startActivity()) 为了之后能从其后的 Activity 中接受到结果,需要实现 onActivityResult()这个回调函数。当之后的 Activity 完成时, 它会在一个 intent 中返回一个结果到 onActivityResult()方法中。 例如,也许你想让用户选择一个联系人,这样你的 Activity 可以使用那个联系人的 信息做些什么。55 苏州科技学院本科生毕业设计(论文)下面是你如何建立一个这样的 intent 并且处理其结果private void pickContact() { // Create an intent to “pick” a contact, as defined by the content provider URI Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { // If the request went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform a query to the contact's content provider for the contact's name Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null); if (cursor.moveToFirst()) { // True if the cursor is not empty int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name = cursor.getString(columnIndex); // Do something with the selected contact's name... } } }这个例子展示了要处理 Activity 的结果,你应该在你的 onActivityResult()方法中使 用的基本的逻辑。第一个条件是检查请求是否成功如果成功了,那么 resultCode 应该为 RESULT_OK 并 且 响 应 结 果 的 请 求 是 否 已 知 这 种 情 况 下 , requestCode 匹 配 startActivityForResult()发送的第二个参数。从这看出,这些代码通过查询返回的 intent 中的数据处理 Activity 的结果。现在的情况是,ContentResolver 违反 content provider 执 行一个查询返回一个游标允许读取查询的数据。 更多使用 intents 的信息,请参阅”用户界面“文档。 关闭一个 Activity 你可以通过调用 finish()函数来关闭一个 Activity。 你也可以通过调用 finishActivity() 关闭之前启动的 Activity。 (通过 startActivityForResult 打开的)56 苏州科技学院本科生毕业设计(论文)注意:大多数情况下,你不应该使用这些方法显式的关闭 Activity。 像下面 zctivity 生命周期章节讨论的,Android 系统为你管理 Activity 的生命,所以 你不需要结束你自己的 Activity。调用这些方法也许反而会影响用户期待的体验,你必 须确定不想让用户返回到 Activity 的这个实例才调用这些方法。 管理 Activity 生命周期 通过实现回调函数来管理你的 Activity 生命周期对于开发一个强壮而且灵活的应用 是至关重要的。Activity 的生命周期直接被关联的其他 Activity、它的 task 和 back stack 直接所影响。 一个 Activity 本质上可以存在 3 中状态: Resumed: Activity 在屏幕的前台且拥有用户焦点(这个状态有时也指”运行中” ) 。 Paused: 另一个在前台的 Activity 获得焦点,但是此 Activity 仍然可见。也就是说,另一个 Activity 在此 Activity 之上是可见的,并且它是部分透明的或者没有覆盖整个屏幕。一 个暂停的 Activity 是完全活着的(Activity 对象在内存中保留,它保持着所有的状态和 成员信息,并且依然附属在 window manager) ,但是可能会被系统在内存极低的情况下 杀死。 Stopped: 这个 Activity 完全被另一个 Activity 遮盖(这个 Activity 现在处于后台中) 。一个停 止的 Activity 也仍然是活着的(Activity 对象在内存中保留,它保持着所有的状态和成 员信息,并且依然附属在 window manager) 。然而,它对用户不再可见,并且在需要内 存的其他地方可以被系统杀死。如果一个 Activity 处于停止或者暂停状态,系统可以请 求它了结自己(调用它自己的 finish()方法)在内存中放弃它,或者简单的杀死它自己的 进程。当 Activity 再次被打开时(在被结束或者杀死之后) ,它必须完全的重建。 实现生命周期回调函数 当一个 Activity 过渡到或者过渡出上面描述的不同状态时,它会在不同的回调函数 中收到通知。所有的回调函数都是当你的 Activity 状态改变时你可以覆盖来做恰当的工 作的钩子。 下面的 Activity 提纲包含每一个基本的生命周期方法:57 苏州科技学院本科生毕业设计(论文) public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The Activity is being created. } @Override protected void onStart() { super.onStart(); // The Activity is about to become visible. } @Override protected void onResume() { super.onResume(); // The Activity has become visible (it is now “resumed”). } @Override protected void onPause() { super.onPause(); // Another Activity is taking focus (this Activity is about to be “paused”). } @Override protected void onStop() { super.onStop(); // The Activity is no longer visible (it is now “stopped”) } protected void onDestroy() { super.onDestroy(); // The Activity is about to be destroyed. } }58 苏州科技学院本科生毕业设计(论文)注意:你的这些生命周期方法的实现必须总是在你做任何工作之前调用父类的实 现,像上面展示的那样。 综合起来,这些方法定义了 Activity 整个生命周期。通过实现这些方法,你可以在 Activity 生命周期中监听 3 个嵌套循环。 Activity 的整个生命期间是介于调用 onCreate() 和调用 onDestroy() 之间的。你的 Activity 应该执行全局状态设置(例如定义布局)在 onCreate()中,在 onDestroy()释放所 有剩余资源。例如,如果你的 Activity 有一个在后台运行的线程用来从网络下载数据, 它可能在 onCreate()中创建,然后在 onDestroy()停止。 Activity 的可见生命周期是介于调用 onStart()和调用 onStop()之间的。 在这段时间期 间,用户可以在屏幕看见 Activity 并与之交互。例如,当一个新的 Activity 启动时此 Activity 的 onStop()被调用,并且它不再可见。在这两个方法之间,你可以维持需要展示 给用户的资源。例如,你可以在 onStart()中注册一个 BroadcastReceiver 来监视影响你 UI 的改变,当用户不再能看到你显示的内容时,在 onStop()中注销。由于 Activity 在对 用户可见与不可见之间的切换,系统也许会在 Activity 整个生命中多次调用 onStart()和 onStop()。 Activity 的前台生命是在 onResume()与 onPause()之间。在这段时间期间,Activity 在所有其他 Activity 的前面显示在屏幕上,并且拥有用户输入焦点。一个 Activity 可以 频繁的在前后台转换 - 例如,当设备进入睡眠或者对话显示的时候,onPause()被调用。 因为这个状态可以经常转换, 这两个方法中的代码应该适当的轻量话来避免让用户等待 缓慢的转换。59 苏州科技学院本科生毕业设计(论文)上图说明 Activity 可能在状态间发生的这些循环和路径。矩形区域描述当 Activity 在状态间转换的时候你可以实现的回调函数来执行操作。 相同的生命周期回调函数在表格中列出。 描述每个回调函数的更多细节和确定每一 个在 Activity 总的生命周期的位置,包括系统能否在回调函数完成之后杀死 Activity。 方法 描述 当 activity 第一次建立 时调用。你应该在这做所 有的你普通的静态设置 onCreate() 建立 view,绑定 list 数据 等等。 这个方法传递一个包 含此 activity 之前状态(如 果 这 个 状 态 被 捕 获60之后是否可被 杀死下一个方法否onStart() 苏州科技学院本科生毕业设计(论文)了)Bundle。后面总是跟着 onStart()。 在 activity 停止后开始之前 onRestart() 调用。后面总是跟着 onStart()。 在 activity 对用户可见 之前调用。如果 activity 来 onStart() 到 前 台 , 后 面 跟 着 onResmue(), 否 则 如 果 隐 藏,后面跟着 onStop()。 在用户与 activity 开始 交互之前调用这时的 onResume() activity 在 activity 的 stack 顶部,带着用户的输入进 入 。 后 面 总 是 跟 着 onPause()。 当系统重新开始另一 个 activity 时调用。这个方 法往往用来提交未保存的 改变使之持久化,停止动 画和其他消耗 CPU 的事情 等等。不管怎样它应该迅 onPause() 速的执行完毕,因为下一 个 activity 要等到它返回后 才会重新使用。如果 activity 返回到前面,后面 则跟着 onResume(),否则它 对用户不可见,后面跟着 onStop()。61否onStart()否onResume()或者 onStop()否onPause()可以onResume()或者 onStop() 苏州科技学院本科生毕业设计(论文)当 activity 不再对用户 可见时调用它将要被销毁 时或者另一个 activity 重新 onStop() 复用后正在覆盖它时会发 生。如果返回与用户交互, 后面跟着 onRestart(),否则 如果 activity 正在消失,后 面跟着 onDestroy()。 activity 销毁前调用这 是 activity 收到的最后调用 它的调用是因为 activity 正 onDestroy() 在关闭 ( 有人 在此 调 用了 finish())或者系统暂时销毁 这 activity 实例来节省空间 你可以使 isFinishing()方法 来区别这两种情况。 标记了“Killable after?”的列是指:在函数返回之后的任何时候,系统是否可以杀 死 Activity 存在其中的进程而不执行 Activity 中任何其他代码。三个方法标记了“yes” : (onPause(),onStop(),and onDestroy())。因为 onPause()是三个中的第一个,一旦建立了 Activity,onPause()是最后一个能保证进程被杀死之前能被调用的函数 - 如果系统必须 紧急恢复内存的话,那么 onStop()和 onDestroy()也许不会被调用。因此,你应该使用 onPause()存储关键的持久性数据(如用户编辑) 。然而,在 onPause()期间,对于哪些信 息是必须保存的你应该有选择性, 这个方法中因为任何阻塞的程序都会阻塞转换到下一 个 Activity 并且放慢用户体验。在 Killable 这列标记”No”的方法从被调用的时刻起保 护这 Activity 的进程不被杀死。因此,一个 Activity 从 onPause()返回到 onResume()是可 以被杀死的。直到 onPause()被调用和返回,他才会再次成为可杀死的。 注意:在表中的定义在技术上不”可杀死的”Activity 也许依然会被杀死 - 但是只 会发生在当没有其他依赖极端环境下。 当 Activity 可能会被杀死的更多讨论在”进程和线程“文档中。62可以onDestroy()可以 苏州科技学院本科生毕业设计(论文)保存 Activity 状态 管理 Activity 生命周期的介绍简洁的提到当 Activity 处于暂定或者停止状态时, Activity 的状态被保存着。这是事实,因为当 Activity 处于暂停或停止状态时,Activity 对象仍然保存在内存中 - 所有它的成员信息和当前状态仍然活着。因此,任用户在 Activity 内的改变也保存着,所以当 Activity 返回到前台(当它”重新开始”时) ,那些改 变依然在那。然而,当系统为了恢复内存而销毁 Activity,Activity 对象就被销毁了。所 以系统不可能简单的使用其完整的状态重新开始它。 取而代之的是,如果用户导航回这个 Activity 中,系统必须重新建立 Activity 对象。 然而, 用户没有注意到系统销毁了 Activity 然后又重建了它, 因此也许期待这个 Activity 会和之前一模一样。这种情况下,通过实现运行你保存你的 Activity 状态的额外的回调 函数: onSaveInstanceState(),你能保证 Activity 状态最重要的信息被保存下来。 在系统使得 Activity 从脆弱到灭亡之前,调用 onSaveInstanceState()系统传递一个使 用例如 putString()和 putInt()方法的你可以保存状态信的 Bundle 键值对到这个方法中。 然后,如果系统杀死了你的应用进程并且用户导航回到你的 Activity 中,系统重新建立 这个 Activity 并且传递这个 Bundle 到 onCreate()和 onRestoreInstanceState()方法中。使用 这两个方法的任意一个, 你可以从 Bundle 中分离出你保存的状态然后恢复 Activity 状态。 如果没有状态信息恢复,那么传递给你的 Bundle 是 null(当你的 Activity 第一次建立的 时候就是这种情况) 。63 苏州科技学院本科生毕业设计(论文)两种方式 Activity 带着其完整的状态返回到用户焦点:要么 Activity 被销毁了,然 后重新建立并且 Activity 必须恢复之前保存的状态,要么 Activity 停止了,然后重新开 始,Activity 状态完整的保存。 注意:不保证 onSaveInstanceState()会在你的 Activity 销毁之前被调用,因为有许多 情况是没有必要保存状态的(例如当用户使用 back 键离开你的 Activity,因为用户就是 想关闭这个 Activity) 。 如果系统调用 onSaveInstanceState(),它会在 onStop()之前,并且可能在 onPause() 之前。然而,即使如果你什么也不做并且不实现 onSaveInstanceState(),Activity 的一些 状态也会被 Activity 类的 onSaveInstanceState()默认实现所恢复。默认实现为每一个布局 中 的 view 调 用 允 许 每 一 个 view 提 供 它 自 己 应 该 保 存 的 信 息 的 相 应 的 onSaveInstanceState()方法。几乎每一个在 Android framework

我要回帖

更多关于 银行信用证编号长度 的文章

 

随机推荐