用Eclipse开发iPhone Web 应用程序
清单 4. 输出详细信息页面的 Doclet 代码
private void printDetail(PrintStream p, ProgramElementDoc doc,
String id, String name) {
divHeader(p, id, name, "panel");
textHeader(p, null);
textRow(p, getSignature(doc));
textRow(p, getCommentText(doc.commentText()));
textFooter(p);
if (doc instanceof ExecutableMemberDoc) {
printMethodDetail(p, (ExecutableMemberDoc) doc);
}
divFooter(p);
}
private void printMethodDetail(PrintStream p, ExecutableMemberDoc field) {
if (field.parameters().length > 0) {
textHeader(p, "Parameters");
for (int i=0; i textRow(p, "" + field.parameters()[i].typeName() + " " + field.paramTags()[i].parameterName() + ": " + getCommentText(field.paramTags()[i].parameterComment())); } textFooter(p); } if (field.throwsTags().length > 0) { textHeader(p, "Throws"); for (int i=0; i textRow(p, "" + field.throwsTags()[i].exceptionName() + ": " + getCommentText(field.throwsTags()[i].exceptionComment())); } textFooter(p); } } 代码是通用的,这样 printDetail() 将处理类描述、字段、构造函数和方法的输出。后两种类型是 ExecutableMemberDoc 的子类,因此打印关于其参数和已抛出异常的附加信息。 Aptana 的iPhonePreview 模式将帮助调试输出文件。在每次迭代后,您可以快速单击该应用程序查找已设计界面中的不一致性。但是,使用 Preview 模式可以掩盖性能问题:现代计算机的运行速度比iPhone的 620-MHz ARM 处理器快三至五倍。此外,用户经常通过速度慢的蜂窝网络下载页面,因此必须用实际iPhone运行您的应用程序。 性能问题 当我在 iPhone 中测试查看 iDoc 时,我发现输出一个大型 HTML 文件将导致跳帧和性能下降。要解决此问题,创建一个用于导航包名/类名的主文件,然后为带有注释和方法细节的每个类创建独立文件(参见清单 5)。虽然此过程将生成大量文件,但是各个文件大小都非常小,并且应用程序运行得十分流畅。 清单 5. Doclet 代码将迭代每个包,然后为每个类创建文件 p = new PrintStream(out); printHeader(p); PackageDoc[] packages = root.specifiedPackages(); Arrays.sort(packages); printPackages(p, packages); for (int i=0; i printPackageDetail(p, packages[i]); } for (int i=0; i ClassDoc[] classes = packages[i].allClasses(); Arrays.sort(classes); for (int j=0; j // Creating a separate file for each class. PrintStream p2 = new PrintStream(new FileOutputStream(getFilename(classes[j]))); printClassDetail(p2, classes[j]); p2.close(); } } printFooter(p); p.close(); 运行 iDoc 在经过该性能增强之后,就能运行 iDoc 了。为 OpenJDK 中的 51 个 java.* 和 javax.* 包(表示 1,304 个类)生成 Javadoc,然后把所有内容上传到Web服务器中。这包括超过 16 MB 的文件,但是主要导航页面只有 112 KB,并且每个单独类的详细信息页面平均为 13 KB。即使在使用 EDGE 网络时,应用程序也能够快速响应。如果您已经拥有了 iPhone,请访问 iDoc 站点(请参阅 参考资料)并尝试使用,也可以下载 iDoc 来为您自己的代码库生成特定于 iPhone 的 Javadoc。图 11 显示了最终的应用程序。 可能对 iDoc 进行的扩展包括支持显示 Java 5 泛型,以及更智能地捕捉 Javadoc 注释内的标记来实现页面之间的链接。如果您有兴趣添加 iDoc 的功能,则可以下载完整的源代码. iPhone 开发的前景 2007 年 10 月,Steve Jobs 宣称 Apple 将于 2008 年 2 月发布 iPhoneSDK。详细信息很少,因为这是在 2007 年 12 月编写的,但是SDK将允许您在不需要使用 Safari 的情况下创建能够在 iPhone 上本机运行的应用程序。给定 iPhone 底层架构之后,开发平台很可能是类似于 Mac OS X 的 Cocoa 和 Objective-C。Apple 主管人员的最新评论暗示第三方应用程序将需要接受某种类型的认证过程。 通过在本机运行,需要高级动画、图形和网络访问的应用程序将从中获益。不过,即使在发布了SDK之后,iPhone 的Web开发仍会是一个吸引人的主题。Web应用程序很容易创建和部署。诸如 Aptana 和 iUi 之类的工具简化了开发,并且能够快速创建 Web 应用程序。正如 iDoc 所展示的,没有必要等待 SDK 的发布:使用现有的工具,您可以创建具有本机界面外观的全功能 iPhone Web 应用程序。
out = new FileOutputStream(index);
图 11. 用于 iPhone 的全部 51 个包的 Javadoc
评论