1、 应用软件设计和开发的方法探讨:分析了 应用运行环境的特点,并针对这些特点提出相应的对策;同时,针对 中应用程序显示区域小,CPU处理速度和内存容量限制,应用程序的实时性要求和开发环境的封闭性等特点,提出了一些设计策略和解决方案。关键词: ;应用软件;设计;对策0引言用户在使用 中无时无刻不在和 上的应用程序打交道, 应用程序设计得好坏直接影响用户对该款 的感受。 的应用程序的好坏决定了一款 的内在品质,从而在很大程序上决定了一款 在市场上的命运。本文结合笔者开发 应用程序的经验,探讨 上应用软件的设计和开发方法。1 应用软件的特点分析目前市场上的 分两类:功能 (Feature Phone)
2、和智能 (Smart Phone)。虽然这两类 还没有一个明确的界线,但是 上运行的应用程序都有如下特点:显示区域小为了方便携带和按键,大屏的像素点为128x160、160x24、240x320等。CPU处理速度和内存容量比段小基于本钱的考虑, 上的处理器(MCU)的频率较低,一般只有几十M,智能 稍高,一般200400M。内存(RAM和FLASH)一般为8M,16M,智能 一般32M,64M。和移动网络的交互密切,实时性强能与移动网络随时随地通信,交换语音和数据信息。对于来自移动网络的来电,短消息,彩信,推消息(Push message)等,应用程序必须能及时提示用户,并能让用户方便地处理这
3、些信息。这一点也是 产品和其他的PDA,PMP等产品的最大区别,同时对这些信息的处理也是 软件设计和开发的关键点和难点。软件的开发环境千差万别,因而 应用程序的运行环境相差甚远现在市场上的 的开发环境要么是 的芯片开发商提供,要么是独立的软件公司提供,还没有一个统一的开发标准。各个平台的软硬件环境差异很大,在一个平台上的应用程序根本不能在另外一个平台上运行。 应用软件开发和平台紧紧地绑定在一起,软件的可移植性极差。2 应用软件设计和开发的对策针对上述 应用软件的特点,在进行 应用软件设计和开发的时候必须有清醒的认识,并预先有相应的解决方案,在工程进行到中间或者最后才发现或者考虑这些问题为时太晚
4、。下面是笔者认为在 应用软件设计和开发上总体需要把握好的关键点。21怎样应对应用程序显示区域小应用程序的界面风格应一致。好的做法是设计一个共用的应用程序的基类(接口),所有的应用程序都从这个基类(接口)继承;设计一组公共的显示控件,这些控件的显示风格可以通过配置文件进行设置。这样可以很方便地到达“换肤的功能,从而满足用户界面上个性化的需求。多用图标和简洁文字来表达界面的含义。由于显示区域的限制, 很难像PC那样利用多重窗口,根本上是一个应用程序占用整个窗口。采用统一的图标和简洁的文字能到达界面意义明确,表达意义形象的目的,这比冗长的文字更能吸引人的注意,使人记忆深刻,从而给用户良好的使用体验。
5、如果能结合富有表现力的动画图片更好。因此,必须设计的图形控件有:应用窗口类,图片类,动画类,图片标签类,进度条类,单行列表类,多行列表类,单项选择列表类,多项选择列表。在 应用窗口中应该充分利用这些类来设计有特色的用户界面。设计一个通用的合理的输入法接口。输入法的设计在 应用程序中有重要的地位。输入法的设计在实现的时候要考虑的实际问题有:(1)怎么方便地切换各种输入。例如,可以考虑用#,x键来切换各类文字的输入。另外,标点字符和数字等由于使用的频率很高,可以考虑增加快捷菜单或者快捷键操作的输入方法。(2)待选字符的安排是否合理,操作是否方便。例如图1所示界面是笔者设计的中文编辑界面。图1中文编
6、辑界面说明:如果用户输入xyz所在的按键。那么在区域1显示所有的待选拼音笔画。在这个时候用户可以按左右方向按键来选择待选拼音笔画。用户按OK键,在区域2,高亮(Highlight)显示的是第一个待选汉字。这时按左右按键高亮光标在待选汉字间移动。如果汉字太多,可以按上下按键来在前一页和后一页汉字之间切换。按OK键,高亮选定的汉字将被输入到编辑界面上。在区域3,是区域2高亮汉字的联想词组。用户可以长按1-9键将显示的词组直接输入到编辑界面(不需要高光选择)。短按一次取消键(C键)删除编辑界面的一个汉字,快速短按两次,删除编辑界面的一行汉字,长按取消键,全部删除编辑界面的汉字。上面举的例子只是中文的
7、输入,实际情况是还需要英文字母,英文单词,标点符号等字符的输入。所以,输入法的软件设计的细节问题很多,各个应用的需求千差万别,需要我们在开始设计软件时充分考虑输入法接口的可扩展性和灵活性。22怎样应对CPU处理速度和内存容量的限制设计或者选定一个合理而高效的系统架构。好的应用程序需要一个好的系统框架。针对 的CPU和内存的特点, 的应用程序的运行环境和PC上的程序运行环境有很大的不同,用表1总结如下:通过上面的比照,可以看出, 的设计应注意以下几点:(1)以当前 的硬件为基准,采取适度超前的原那么来定义系统架构。整个架构不必大而且全,要小而精,并尽量做到架构中的各个部件具有很好的可裁减性。这样
8、的系统架构才能满足各种不同的硬件需要。(2)精心设计架构中的每一个部件,消除系统冗余的代码;合理定义接口,系统的架构才能清晰容易被人理解,并且系统的可靠性也高。只有这样,整个系统架构的代码占用的内存少,应用程序在运行的时候占用的内存和CPU资源少。(3)应用程序可以在PC上模拟运行。一般 上调试应用程序的过程比较复杂,如果一个很小的改动都要到 上去调试很浪费时间,同时,在PC上调试程序也比在 上调试程序方便得多。一个好的程序架构的根本要求是绝大局部的应用都可以在PC机上模拟开发完成。精心设计应用程序。应用程序的执行效率和应用程序的设计密切相关。对于 上的应用程序,不同的设计策略有不同的结果。例
9、如:对于一个 本的应用程序,读取所有 记录至少有两种方法:一种是在一开机的时候就读;另外一种是在 本应用翻开的时候才读。实际情况是前一种情况较好,因为,这样用户每次进入 本的时候 可以很快地显示所有的 记录,后者那么慢得多,在有些系统中可能是难以忍受,必须提前准备好数据。在设计应用程序中着重考虑的问题有:(1)程序的处理效率是否高;(2)程序的内存占用和CPU是否太多;(3)用户的操作是否方便,应用的响应速度是否足够快;(4)界面的定义是否美观,和系统的总体风格相一致;23怎样应对应用程序的实时性要求 最重要的功能是通话和通信。这些一般和无线网络都有密切的关系。对于来自无线网络的来电,短消息,
10、推消息等,必须有一个应用来统一调度和处理这些消息和信息。笔者称之为待机管理应用。待机管理应用是底层软件和其他应用程序的调度员,同时它也负责待机界面下的界面显示和其他应用不方便处理的一些任务。如果用图来表示,那么它在整个系统中的位置如图2所示。待机管理应用的特点是:(1)一开机就首先运行;(2)总是处于运行或者待命状态,不会退出。因此,这个应用的稳定性要求就特别高。在软件设计的时候要特别注意功能划分,如果某项功能能在其它的应用中处理,该功能应尽量分到别的应用中去,以免待机管理过于复杂,影响系统的稳定性。待机管理应用的功能一般如下:(1)处理与充电器和电池有关的消息。例如:插入充电器,如果是在开机
11、,那么在待机下显示充电动画;拔掉充电器,关闭充电动画的显示等;(2)处理开机动画或者问候语的显示;(3)如果底层协议报告SIM卡设置了PIN码,启动SIM卡的PIN码输入界面;如果还设置了 密码,那么启动 的密码输入界面;(4)显示待机下面的各种状态图标,网络注册的信息,时间和日期信息,各种应用图标的排列;(5)显示屏幕保护的界面;(6)处理用户在待机状态下的各种按键操作,例如:如果用户短按了数字1所在的按键,那么要启动号码编辑应用或者界面,如果用户在应用图标或者菜单中按或者点击了某一个应用,那么要启动该应用;(7)显示各种系统状态,例如:未接来电和短消息的提示,电池电量缺乏的提示,闹钟的提示
12、等;(8)转发底层的各种消息给相应的应用程序,为其他的上层应用提供统一、简洁的接口。这样做的原因是通过对底层消息的封装和转换,能简化其他应用处理。并且使待机管理应用能及时了解系统当前的状态,并及时通知给用户。24怎样应对应用程序的开发环境的封闭性正如上面提到的,现在市场上主流的 开发平台很多,并且还不断有新的平台涌现,怎样开发能在各种不同的平台上有很强移植性的应用程序对程序设计和开发人员是一个艰巨的任务。笔者结合自己的经历认为可行的思路如下:(1)应用的用户界面和实际的处理逻辑尽量分开,将一些可以共用的处理逻辑提炼成共用的函数接口。例如:日程应用的阴阳历转换算法, 本中的首字母查找算法等都可以
13、放在一个单独文件或者库文件中,这样的代码可以很方便地移植到其他的平台上。(2)编写代码的时候,数据结构的定义和函数的处理要考虑不同硬件平台的差异。一个好的做法是定义一个平台上通用的数据类型定义,而不是直接使用设计语言里面原始定义的数据类型。例如:如果是在CC+的开发平台上,我们可以定义一个文件typesh,它里面包含如下通用类型的定义:typedef char BOOLEAN;typedef unsigned char BYTE;typedef char CHAR;typedef unsigned short WCHAR;typedef char INT8;typedef unsigned c
14、har UINT8;typedef shOrt INTl6;typedef unsigned short UINT16;typedef long INT32;typedef unsigned long UINT32;typedef long LONG;typedef unsigned long ULONG;在程序中,所有数据结构的数据项,函数的参数和返回值,类的成员数据都用上面的这些通用类型,这样编写的软件的可移植性就可以大大提高。如果可能,多采用成熟的第三方软件或者知名的开源代码库。 的应用经常碰到局部模块是自己开发还是采用第三方软件的问题。为了软件的可移植性,加快软件的开发速度,这些模块应
15、该多采用专业公司开发的成熟软件或者采用稳定的开源软件。这比自己重新开发好、快捷方便得多,开发本钱也比较少。例如:现在很多 都支持MP4播放,这样就涉及音视频编解码的问题,如果可能,选择一个经过市场验证,可移植性强的第三方或者开源的音视频编解码库比自己进行开发要合算得多,这样的应用程序的可移植性比自己在特定平台上全部由自己开发的应用程序要好。3结束语 上的应用程序开发环境现在还是一个比较封闭,与应用程序耦合比较紧密的系统;应用程序的设计和开发相对复杂,对应用的稳定性,平安性,实时性要求也比较高。无论是对 系统平台的设计人员还是开发人员,只有在了解其特点的根底上才能提出有针对性的方案。本文指出了这些特点并阐述了笔者的观点,希望能起到抛砖引玉的作用。注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。