如何解决Java ME设备碎片问题

移动开发 后端
本文阐述如何使用 Mobility Pack 调整移动设备属性,以使用针对设备功能的自定义配置和预处理器代码来消除设备碎片问题。不幸的是,并非每个设备碎片问题都可以使用这些方法来解决,但这些示例显示了在为移动设备开发时减轻这些问题的影响的方法。

一次编写、随处运行的口号曾驱动了 Java 编程语言的流行,但在 Java Micro Edition (Java ME) 的世界中却并不适用。屏幕大小、颜色深度和内存等设备功能显著不同。您必须选择配置文件、配置和 J2ME API,而且会碰到我们所谓的设备碎片问题。本教程介绍如何使用 IDE 的内置功能来解决 Java ME MIDP 设备碎片问题。

需求

开始之前,需要在您的计算机中安装以下软件:

Java Standard Development Kit (JDK) 版本 5.0 或 6.0

带有 Mobility 包的 NetBeans IDE 6.0

注意:可以使用 Mobility Pack 附带的 Sun Java 无线工具包(Wireless Toolkit)部署此项目。不必使用其他软件来执行本教程介绍的基本概念。但是,如果需要部署到其他平台,我们建议您下载您要调整的适当仿真程序。可以使用以下几个***的 CLDC/MIDP 设备平台:

Nokia Series 40 SDKs for Symbian OS

Nokia Series 60 SDKs for Symbian OS

Sony Ericsson SDK 2.2.4 for the Java ME platform

Motorola Java ME SDK v6.4 for Motorola OS Products

如果您不了解 NetBeans Mobility Pack 或 Java ME 开发,建议您在继续本教程之前,阅读 NetBeans Mobility Pack 6.0 for CLDC 快速入门指南。本指南包括有关添加和注册平台仿真程序的章节。

设置应用程序

本例使用一个叫做 Ball Shot 的简单游戏,阐述如何调整设备功能来解决设备碎片问题。

下载 BallShotGame.zip 项目

解压项目并将内容放在 IDE 的 project_home 目录中。

有关将 mobility 项目导入 IDE 中的更多说明,请参阅 Mobility 项目导入指南。

创建自定义配置

解决设备碎片问题的一个策略基于 项目配置 的 NetBeans 使用。这允许您创建一组源码并为要调整的每个移动设备进行定制。注意保持配置一致,以便仿真程序平台和目标设备与要创建的“项目”配置相对应。在下例中,Nokia Series 40 是目标配置。

#p#

创建项目配置

选择“文件”>“打开项目”(Ctrl-Shift-O)。导航至已解压和已安装 SingleCotopiaGameBallShot 项目文件夹所在的文件夹。

右键单击 SingleCotopiaGameBallShot 项目节点并选择“属性”。

单击页面顶部的“管理配置”按钮。这将打开“管理配置”对话框。

单击“添加”,然后为配置键入所需的名称,然后点“确定”。

为要部署的其他仿真程序重复上一步骤。

创建功能

功能是设备属性,比如屏幕大小、颜色深度、API 支持和音频支持。在项目中创建功能允许您将其与一个或多个支持特定属性或属性组的项目配置相关联。如果将来需要修改、移除或添加配置,只需将配置与实现更改的功能相关联即可。然后,配置将自动与任何与功能相关的代码块相关联。

右键单击 SingleCotopiaGameBallShot 项目节点并选择“属性”。

从“类别”菜单树中选择“功能”页面。

从“项目配置”下拉菜单中,选择与要定义的功能相关联的配置。

如果需要,取消选中标有 使用默认配置值 的框。

单击“添加”按钮。

在“新建功能”对话框中,输入功能的名称,比如 screen,如果 screen 功能已经存在,则单击”编辑“按钮。

输入此功能的值。在本例中,输入 240x320。其他功能可以配置并调整为其他变量,比如颜色深度和音频支持。单击“确定”按钮关闭“新建功能”对话框。此功能现在已经与所选项目配置关联到一起了。

可以将此功能与其他配置相关联,方法是从“项目配置”菜单中选择不同的配置并单击“添加”按钮。

#p#

使用预处理器块添加特定于配置的代码

预处理器块允许创建、管理和跟踪特定于一个或多个项目配置或功能的代码。此代码仅为您标识的配置或功能启用(或禁用)。针对移动设备最实用的属性是屏幕大小。屏幕大小、颜色深度、API 支持和其他功能的一个有用的参考站点是 Jbenchmark 站点。

在 BallShotImageCreator.java 编辑器窗口中,右键单击实例化 BallShotImageCreator 的源码行 (public BallShotImageCreator() {。

右键单击此行并选择“预处理程序块”>“创建 If/Else 块”。在“可用项目”框中滚动并选择先前定义的功能 screen。

在行 //#if screen 上,添加以下代码:== "240x320"

当活动配置与指令值匹配时,则部署由 //#if 预处理器指令标记的代码。当活动配置与预处理器的值不匹配时,则使用由 //#else 预处理器指令包围的代码。换句话说,如果活动平台具有 240x320 功能,则仿真程序显示 22 像素的球。//#endif 预处理器指令完成预处理器块。下面就是为此游戏的一定范围的流行屏幕大小编写的示例:

 //#if screen == "128x128"
  //#       ballWidth = 10;
  //#elif screen == "176x182"
  //#       ballWidth = 16;
  //#elif screen == "176x208"
  //#       ballWidth = 16;
  //#elif screen == "240x320"
          ballWidth = 22;
  //#endif

在仿真程序上运行击球游戏

选择“运行”>“运行主项目”。

仿真程序启动之后,它应显示以下菜单:

单击仿真程序上的主按钮以启动游戏。仿真程序显示以下屏幕。为了比较,我们包括了不使用预处理器指令的游戏的截屏。注意,相对于仿真程序屏幕,图片太小了。

【编辑推荐】

  1. Java ME平台中的URLEncoder实现类
  2. 详解基于J2ME平台下SOAP协议的应用
  3. J2ME中应用程序的内存优化
责任编辑:杨鹏飞 来源: Java吧
相关推荐

2023-03-01 10:02:43

2021-08-11 15:35:54

多设备交互应用框架

2021-08-18 16:02:29

Windows 11操作系统微软

2012-09-05 11:09:15

SELinux操作系统

2010-03-18 14:54:57

Java SynDem

2010-04-29 17:46:31

Oracle死锁

2009-07-06 17:50:13

Java JSP

2017-07-20 07:30:16

大数据数据互联网

2013-05-21 10:49:59

Windows硬件冲突

2011-08-29 10:34:00

网络安全云安全云计算

2011-03-23 14:42:47

CPU过度消耗

2017-10-17 09:21:06

2021-06-06 13:05:15

前端跨域CORS

2010-07-16 13:52:26

telnet漏洞

2023-10-30 18:35:47

MySQL主从延时

2012-07-02 10:13:05

Android 4.1

2009-09-21 17:10:14

struts Hibe

2023-05-25 08:00:36

阿⾥云DNS重试机制

2019-07-30 08:28:44

VirtualBox桥接网络

2011-09-05 13:32:56

点赞
收藏

51CTO技术栈公众号