欢迎来到天天文库
浏览记录
ID:37713365
大小:23.86 KB
页数:17页
时间:2019-05-29
《Symbian开发决窍》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、设计诀窍 1.最重要的设计诀窍是将‘引擎’代码与用户界面(UI)代码分开,分为不同的模块。这样设计有助于您的程序在不同用户界面系统之间的移植,SymbianOS本身也采用这种设计。方法之一是在二进制级就进行这个区分。将所有非用户界面相关代码放到独立的引擎.DLL文件中。您的程序中用户界面相关的代码可以链接到这个。DLL文件,从而访问引擎获取其提供的功能。另一种方法是在源代码级做出区分。应用程序生成为一个单一的.APP文件,但将‘引擎’相关代码和用户界面相关代码分到不同的.CPP和.H文件中,以便于管理和调试。编码时采用这种设计,您可以减轻移植到新
2、的用户界面平台时产生的负担;纯引擎代码经常可以不经修改就在任何用户界面平台上运行。这意味着移植到新用户界面时您只需要移植和优化已经单独分开的用户界面层就行了。 2.设计时要牢记地方化支持。千万不要将字符串或文字‘硬编写’到您的源文件中——应使用SymbianOS提供的资源文件机制来储存字符串。 3.应坚持使用软件开发包(SDK)和SymbianOS发布版本明确支持并提供文档的API。使用不受支持或‘不推荐使用’(deprecated)的API将给您的应用程序带来潜在的问题——Symbian保留在未来的版本中更 改或者移除不应被外部开发者使用的AP
3、I的权利。 4.不要假定所有的‘系统’文件都会出现在所有电话上。持有SymbianOS执照的厂商可以灵活的改制其手机;基于同一平台的电话如果由不同的生产商生产很可能包涵不同的支持文件——从而,比如说,如果为您想要播放的音响片段编写固定的地址,此代码将不会保证具有良好的移植性。您至少应该考虑如果未来的手机没有这个系统文件,您将如何处理出错状态的问题。 编码诀窍 以下是您在编写代码时应该记住的一些一般诀窍。 1.确保您的应用程序能够对系统关机事件做出响应。在您的AppUi::HandleCommandL()方法中,必须要对EEikCmdExit(以
4、及任何特定平台相关的事件,例如Series60上的EAknSoftkeyBack)做出响应。 2.要对外来系统事件做出响应。请牢记,您的应用程序是在一个多任务电话系统上运行,您需要将注意力集中于刚获得的/丢失的事件上,以确保当用户获得一个高优先级的通知时您能够做出正确响应。例如,正打进来的电话会干扰您的应用程序的运行,这时应确保您已保存了系统状态和数据(即:您需要对标准的“背景”事件采取适当的行动——请参阅SDK)。一般说来,系统框架会处理这个问题,您不需要采取任何特殊行动——但一定要确保您没有妨碍系统框架的正常操作。 3.内存处理是Symbia
5、nOS需要考虑的一个重要课题。在这一点上,应注意电话有时会不同于模拟器。因此在将您的应用程序呈交给“Symbian认证签名”进行测试之前,务必确保已在实际电话设备上测试了您的程序。 4.内存堆栈空间有限!应尽可能将对象放到内存堆中,而不要放到栈里。KERN-EXEC3异常(panic)发生的主要原因之一就是栈的破坏/溢出。 5.应用程序发生异常(panic)表明您的代码中一定有错误。以下是一些主要、常见的错误: •忘记将非对象成员、被分配到堆的变量加到CleanupStack上。 •将成员变量放到CleanupStack上——这一点要千万避免;在
6、析构函数中将这些变量删除就可以了。 •‘重复删除’——例如,没有正确的从CleanupStack上Pop()出已经被销毁的对象,造成CleanupStack以后试图再次删除它。或者使用过一个对象之后将其删除但忘记将其值设成NULL,从而在析构函数又试图删除一次。 •用可能不存在于您的析构函数中的变量调用函数。 例如,以下代码可能导致异常,因为有可能您在分配内存之前您的对象已经被销毁,或者在应用程序的另一处已经删除了该内存,这样iSomeServer就会处于NULL: CMyClass::~CMyClass(){ iSomeServer->Clos
7、e(); deleteiSomeServer; } 应该如下编写代码: CMyClass::~CMyClass() { if(iSomeServer) { iSomeServer->Close(); deleteiSomeServer; } } •在NULL指针上调用函数。 •函数调用另一个函数,而其使用的变量已经超出范畴, 例如:把一个栈变量传送到一个异步函数的回调(callback)里。在系统资源不够的情况下,得体的处理失效情况是非常重要的。最受限制的资源通常是系统RAM,因此您需要注意正确的处理内存不足的情况。采用‘两段构造方法’和如下所述
8、的CleanupStack机制,对这种防御性编程来说是必不可少和极其重要的。 7.对带“R”字头、具备Close()方法的类,总是使用C
此文档下载收益归作者所有