【发布时间】:2009-05-15 19:20:43
【问题描述】:
我可以在 J2ME 中编写一次代码并在任何手机上运行它,就像我可以使用 .Net compact 框架一样吗?
【问题讨论】:
我可以在 J2ME 中编写一次代码并在任何手机上运行它,就像我可以使用 .Net compact 框架一样吗?
【问题讨论】:
您会遇到每个提供商实现其 JVM 的方式不同。由于每部手机的硬件不同,它们的工作方式都略有不同。大多数东西都可以,但可能会有一些差异。
【讨论】:
遭受碎片化的几个领域:
如果您只使用基本的 GUI 控件,您的应用程序可能看起来与一部手机略有不同。如果不需要,则必须编写处理不同屏幕尺寸和输入法(键盘与触摸屏)的代码。
制造商倾向于以不同的方式解释多媒体和网络规范,或者只是运送包含错误的手机。一些移动网络运营商将只允许 HTTP 网络流量。
管理文件系统访问的安全策略因一部手机而异。在某些手机上,RMS 记录的大小可能会受到限制。
性能因一部手机而异。
...
【讨论】:
您编写的 J2ME 代码在运行时和可访问的类方面需要手机上的特定环境。根据您在应用程序中使用的内容,您可以在某些手机上运行它,而在其他手机上则无法运行。例如假设您是一个使用 MIDP 2.0 和 CDLC 1.1 的 J2ME 应用程序。现在,您的应用只能在支持这些配置文件的手机上运行。
在编写手机应用程序时,您通常会针对特定的手机细分市场。您不希望加速度计应用程序可以在没有加速度计的手机上运行! (我不认为 J2ME 对加速度计有任何支持;))
【讨论】:
是的,您可以在任何支持 java 的手机上运行您的 midlet。
但说到j2me编码,“一次编写,随处运行”的口号就变成了
“一次编写,处处重写”
或
“一次编写,处处调试”
【讨论】:
首先,我想说这里的大多数 cmets 都是正确的,不同的 JVM 的工作方式确实可能略有不同,您应该记住您正在使用的 API。
但是,还有一个需要考虑的因素:标准化。我的意思是诸如 Mobile Services Architecture (MSA - JSR 248) 之类的东西,它们通过创建一些标准的 API 集极大地简化了事情。此外,它们对包含的 API 和如何实现它们的规则进行了一些说明。
MIDP 2.1 之类的标准也在收紧。 2.1 版本基本上是 2.0,但带有“螺栓拧紧”:更严格的规则,使某些方面清晰并消除潜在的碎片。例如,在任何情况下都需要包含双缓冲,或者如果设备有触摸屏,则需要在 Java 中支持触摸屏。
话虽如此,我应该得出结论,碎片化确实在减少,制造商确实采用了 JSR 248 之类的标准。但无论如何,尽可能多地测试您的应用程序,我们都是普通人,JVM 开发人员也会犯错误并在他们的程序中留下错误代码。
【讨论】:
J2ME 和 .NET Compact Framework 都不是无处不在,(尽管有大量手机支持 J2ME)您只能在支持它们的手机上运行。因此,无论哪种情况,您都可以编写一次并在支持平台/框架的任何地方运行。
【讨论】: