`
donsun
  • 浏览: 30009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Symbian开发异常处理框架

阅读更多

Symbian开发异常处理框架

目录

 

 

1    异常处理方式:    1
2    异常定义:    1
3    异常提示信息:    2
4    系统级异常处理:    2

 

1    异常处理方式:

  1. 提示不做处理(ui/view/db)
  2. 警告并建议返回MenuPortal(ui/view)
  3. 警告并返回MenuPortal (ui/view)
  4. 警告并建议退出系统(ui/view/db)
  5. 严重警告,必须退出系统(ui/view/db)

2    异常定义:

  • #define E_INFO         0x80000000
  • #define E_WARN         0x90000000
  • #define E_RETURN     0xA0000000
  • #define E_ERROR     0xB0000000
  • #define E_EXIT         0xC0000000


以上五种异常处理码定义分对应五种异常处理方式,定义业务级异常宏时以上述相加,产生不同的处理方式,例
#define CMS_SAVE_ERROR 0x1

发生异常时:

TRAP(error, cmsvalueDAO->Save(value)); 
if (error != KErrNone)
{
CExceptionInfo::Push(_“CMS写入错误!”);
User:Leave(ERROR + CMS_SAVE_ERROR);
}

 上例为视图向UI抛出的一个用户定义异常,处理方式应该为:“警告并建议退出系统”,将由UI捕获并处理。

3    异常提示信息:

异常提示信信除了通用异常与系统级异常可以统一处理外,各业务级异常由产生异常者自行产生或合成,并置入全局可见性的异常信息缓冲区中,由埔获者取出处理。

CExceptionInfo::Push(_“用户信息写入错误!”);

4    系统级异常处理:

对于symbian系统所产生的异常,各层应用皆可埔获和处理,但不建议埔获后继续抛出,更合理的做法是将系统异常升级为业务异常或处理,或抛出!
通常情况下,为了保证系统的健壮性,常引入业务级别容错逻辑,只有遇到不可宽容的错误时,才会抛出。
视图抛出的业务异常以及整个系统各层面抛出而未埔获的异常,将统一由UI处理,自定义异常有五种处理方式,这个不用说了,对于系统异常加以判断和友好提示后只能执行默认异常处理,致命错会在给出用户提示后将退出系统

引人异常机制的目的

  1. 增强系统健壮性(异常最终捕获处理)
  2. 提高运行期容错能力(选择性屏蔽下级异常)
  3. 增强异构环境抗毁能力(数据库与资源访问错误处理)

实施中注意要点:

  1. 严格控制DAO层面异常,在VIEW或business层捕获,禁止泄漏至UI
  2. 最大限度的保证系统的正常运行和数据的完整性
  3. 视图切换或从选择视图返回时要对携带数据做有效性检查
  4. 抛出异常注意描述要精确
  5. 公有函数注意const修饰
  6. 非本块内初始化的指针变量,使用或删除前做非空判断,删除后的指针一定要置空
  7. Trap操作的系统成本很高,注意尽量少用
  8. 尽量将错误处理局部化
  9.  ViewActivatedL() 不允许涉及iEikonEnv->AlertWin等类似操作
  10. 最大限度的保存用户数据,不能让异常破坏了数据或事务的完整性
  11. 数组操作异常建议捕获
	CDesCArrayFlat* iDescFlatBusiType = 
		new (ELeave) CDesCArrayFlat(1);
	CLEAN_PUSH(iDescFlatBusiType);
	for	(int i = 0;	i <	iArrBusiTypesFix->Count(); i ++)
	{
		TString	strBusiType	= 
			iArrBusiTypesFix->At(i)->GetBusiness_type_name();
		iDescFlatBusiType->AppendL(strBusiType);
	}
	
	User::Leave(-11);
	CLEAN_POP(iDescFlatBusiType);

 


系统异常列表:<E32STD.H>

  • const TInt KErrNotFound=(-1);
  • const TInt KErrGeneral=(-2);
  • const TInt KErrCancel=(-3);
  • const TInt KErrNoMemory=(-4);
  • const TInt KErrNotSupported=(-5);
  • const TInt KErrArgument=(-6);
  • const TInt KErrTotalLossOfPrecision=(-7);
  • const TInt KErrBadHandle=(-8);
  • const TInt KErrOverflow=(-9);
  • const TInt KErrUnderflow=(-10);
  • const TInt KErrAlreadyExists=(-11);
  • const TInt KErrPathNotFound=(-12);
  • const TInt KErrDied=(-13);
  • const TInt KErrInUse=(-14);
  • const TInt KErrServerTerminated=(-15);
  • const TInt KErrServerBusy=(-16);
  • const TInt KErrCompletion=(-17);
  • const TInt KErrNotReady=(-18);
  • const TInt KErrUnknown=(-19);
  • const TInt KErrCorrupt=(-20);
  • const TInt KErrAccessDenied=(-21);
  • const TInt KErrLocked=(-22);
  • const TInt KErrWrite=(-23);
  • const TInt KErrDisMounted=(-24);
  • const TInt KErrEof=(-25);
  • const TInt KErrDiskFull=(-26);
  • const TInt KErrBadDriver=(-27);
  • const TInt KErrBadName=(-28);
  • const TInt KErrCommsLineFail=(-29);
  • const TInt KErrCommsFrame=(-30);
  • const TInt KErrCommsOverrun=(-31);
  • const TInt KErrCommsParity=(-32);
  • const TInt KErrTimedOut=(-33);
  • const TInt KErrCouldNotConnect=(-34);
  • const TInt KErrCouldNotDisconnect=(-35);
  • const TInt KErrDisconnected=(-36);
  • const TInt KErrBadLibraryEntryPoint=(-37);
  • const TInt KErrBadDescriptor=(-38);
  • const TInt KErrAbort=(-39);
  • const TInt KErrTooBig=(-40);
  • const TInt KErrDivideByZero=(-41);
  • const TInt KErrBadPower=(-42);
  • const TInt KErrDirFull=(-43);
  • const TInt KErrHardwareNotAvailable=(-44);

 

 

 

 

 

 

 

  • 大小: 173.1 KB
分享到:
评论

相关推荐

    Symbian开发入门.rar

    1. S60/Symbian应用程序常用架构/框架 2. Symbian开发入门第一步 3. S60v1.2 N-GAGE QD 开发环境搭建(VC6版) 4. S60十大优秀软件 5. S60 系统手机类型及所用操作系统 6. S60 和 Symbian OS 的关系 7. S40与...

    Symbian 应用程序开发

    Series 60是在Symbian OS下进行智能手机应用程序开发的主要平台,它拥有广大的用户群。本书是诺基亚与EMCC公司共同推出的一本Series 60开发的权威参考书,为Symbian OS下的C++编程提供全面指导。. 全书共13章,循序...

    Symbian异常三步曲

    Symbian开发中的异常处理,初学者可以参考

    android与symbian应用程序框架

    android与symbian应用程序框架

    SymbianOS概述 SymbianSDK及其开发环境 Symbian软件开发

    SymbianOS概述 SymbianSDK及其开发环境 Symbian软件开发

    symbian开发例子(多)

    symbian开发例子(多) symbian开发例子(多) symbian开发例子(多)

    Symbian开发简介

    Symbian开发简介 搭建Symbian OS C++ 开发环境 Symbian手机应用开发过程

    Symbian C++开发课件

    Symbian os C++开发课件 第一章 概述.pps 第二章 Symbian概述.pps 第三章 使用SDK开发程序.pps 第四章 基本的类、字符串和动态数组.pps 第五章 内存分配及异常处理.pps 第六章 GUI应用程序框架....

    Symbian 开发入门

    Symbian 开发入门 Symbian OS简介 第二部分:开发环境入门 第三部分:Symbian应用程序开发简介 第四部分:图形显示

    symbian_开发环境搭建手册及简单示例

    symbian_开发环境搭建手册及简单示例

    搭建Symbian开发环境

    详细介绍搭建Symbian系统开发环境,根据需求选择方法

    论文研究-深入探究Symbian资源管理和异常处理机制 .pdf

    深入探究Symbian资源管理和异常处理机制,甘寿聪,,本文通过比较Symbian OS C 与标准C 在异常处理机制上的差异,分析了Symbian OS如何分配和管理资源,以应对因程序员忘记回收或者异常所可

    symbian系统开发教程

    symbian系统开发教程.....symbian系统开发教程

    Symbian开发环境搭建

    本文详细描述了windows环境下Symbian开发环境的搭建步骤以及注意事项,对初学者有很大的帮助。

    DevDiv Symbian应用程序框架

    Symbian 应用程序框架 适合中级开发使用

    Symbian 开发输入法字库

    Symbian 平台用于自己开发输入法用的字库.

    Symbian C++ 高效编程

    分别介绍了Symbian OS中的类命名约定、异常退出、清除栈、两段构造、描述符、良好的描述符风格、动态的数组与缓冲区、使用活动对象的事件驱动多任务、活动对象、Symbian OS的线程与进程、客户/服务器原理、客户/...

    symbian 开发过程

    symbian开发过程,现在还不普及。看过之后会有点明白

    symbian的ui程序框架

    symbian的ui程序框架,可以非常清晰地了解symbian的程序结构

    Symbian应用程序运行框架

    考虑到Symbian作为一个商业的开放操作系统,它的UI框架结构和功能必须达到易用、强大和可靠的统一,不是简简单单完成人机交互而已。所以它的结构 必须是经过精心设计的。因此,要想详细描述其内在的运行过程,一般...

Global site tag (gtag.js) - Google Analytics