以下开发建议有助于避免发生常见的错误,并可将测试、调试和重写源代码所需的时间量降至最低。 该开发建议可尽量避免以下问题:
一:导致从 Windows 移植到 ARM 环境时出现问题
二:导致目标设备上出现问题,但在 BREW Simulator中不一定能够检测到
三:常规有效操作
通过研究和执行这些指导原则,您可以将从 Windows 移植到 ARM 的时间总量降至最低,并使应用程序尽可能在移动设备上正常运行.
First: 执行 NULL 指针检查.
在以下两种情况下需执行检查:
创建 BREW 接口实例时必须检查 NULL 指针。 如果指针有误,则该接口将无法使用。
检查 BREW 方法或已分配内存所传递和返回的所有指针,以确保它们的有效性。 无效指针应使用异常处理机制进行处理。
Second:避免堆栈溢出。
不要将大数组放在堆栈上。 不要在函数内将大数组或变量声明为本地变量,因为 BREW 环境可用的堆栈大小十分有限。 如果需要大量内存(例如,大于 256 字节),则使用动态内存分配操作符,例如 MALLOC 或 IHeap。
如果分配处于递归例程中,则动态分配缓冲区。 如果调用堆栈中的函数较深,则监控之前大堆栈缓冲区的堆栈。
Third:不要编写紧凑循环。
使用紧凑循环会导致目标设备自动重置。 因此,不要编写需要花费大量时间处理应用程序中单个事件的紧凑循环。 这样可以防止将其它事件传递给应用程序,从而避免设备重置。
收到事件时,应用程序将进行所需处理,然后从该事件返回, 使得其它事件可以发送到该应用程序。
Fourth:力求应用程序与设备无关。
要确保应用程序独立于内存大小、键盘、屏幕大小和色深而能够在任何目标设备上执行,请使用 ISHELL_GetDeviceInfo() 从目标设备获取说明。 使用该结果指定显示、按键和多媒体等参数, 而不要硬编码这些参数。
在不同设备上使用 CONVERTBMP 例程处理图像。
Fifth:使用资源。
使用资源存储特定语言的字符串、对话框和位图。 这有助于本地化应用程序,将它从一种语言的目标设备移至另一种语言的目标设备。 不要在源文件中硬编码这些类型的信息。
Sixth:清除内存。
由于目标移动设备上的可用内存十分有限,因此必须释放未使用的内存。 在以下两种情况下需释放内存:
1:必须释放所创建对象的所有实例。
2:应用程序终止时,必须释放所有动态内存(所有已分配内存)。
3:建议您在不需要内存时将其释放。
Seventh:不要使用全局或静态变量。
BREW 结构不支持全局或静态变量,因为动态下载的应用程序无法处理这些数据类型。 此外,使用全局或静态变量可能导致连接器出现目标错误。 始终将持久数据存储在小程序结构中。
Eighth:定义结构时不要初始化结构。
对于 ARM 编译器,定义并初始化的结构被视为静态数据。 请参阅上述“不要使用全局或静态变量”。
Ninth:不要在条件语句内分配变量。
使用 ARM 编译器应避免此类问题。 不要在条件语句中编写赋值代码。
Tenth:不要使用原始浮点运算。
与上述“不要使用全局变量”相同;此处包括类型转换。
使用 BREW 在助手函数中提供的浮点调用。
Eleventh:使用 BREW 提供的标准库函数。
由于目标设备上的 RAM 限制,您需要将编译后的代码大小控制到最小,因此应使用标准 C 库函数的 BREW 子集(如果已提供),而不要使用标准库函数。
避免出现类型强制转换错误。
由于 ARM 编译器处理隐式类型转换比大多数 Windows 编译器严格,因此要明确声明类型转换。 这样可以避免在从 Windows SDK 转换至 ARM 环境时发生编译错误。
检查返回值。
调用有返回值的 BREW API 方法时,应处理成功和失败时的返回值。
处理错误代码。
一些函数可能返回 void,因此应使用 BREW API GetLastError() 机制来识别错误。
文件和目录名称。
在 BREW 3.0 版中,BREW 支持区分大小写的文件名和目录。 具体通过使用 IFILEMGR API 的 fs: 命名规则来支持区分大小写的文件访问。有关详细信息,请参阅 BREW API 参考资料 联机帮助 。 之后请确保以下事项:
MIF 文件名和小程序目录名必须完全匹配(包括大小写)
如果您使用的是旧的命名规则(即不是基于 fs:) 访问文件,须保证应用程序中使用的文件名必须与磁盘上的文件名完全一致(为小写)。 使用此规则时,您的应用程序将无法访问磁盘上使用混合大小写名称的文件和目录。
如果想要使用大小写混合名称的文件和目录,必须使用 fs: 命名规则。
如果您在开发面向低于 BREW 3.0 的 BREW 版本的应用程序,请遵循以下规则:
BREW 仅支持使用小写名称的文件和目录。 因此,请确保只使用小写字符的文件和目录名。 BREW API 1.0.1.x 版本和更高版本采用对应用程序开发者透明的方式处理大小写问题。 不要使用带两个圆点 (.) 的文件名或带一个圆点 (.) 的数据库名。 这些字符由于未知问题而无法使用。
最小化代码大小。
要最小化代码的大小,请在将应用程序加载至目标设备前禁用调试信息选项。
设置警告级别。
在 Windows 中编译应用程序时,应将警告级别设为最高级,即 4 级。 此操作有助于更全面地检查代码。 由于 ARM 编译器在指示错误方面比 Windows 编译器更严格,因此应确保应用程序能够顺利地编译为 ARM 目标。
组合多次读写。
通过组合多次读写操作(如果可能),可以全面提高读写文件的效率。 将数据读入缓冲区,在需要时访问。