来自51CTO技术社区:http://mobile.51cto.com/hot-309248.htm
去年这个时候我很烦恼,因为我觉得我OUT了。
起因是我买了一台Android系统的手机。当我用自己的google账号登录上去后,我发现通讯录被同步了,Gtalk实时通知了,Gmail随身能看了。还有成百数千的应用,让我足足玩了一周。
电脑占据了用户每天8小时的时间,网站创造了巨大的价值。但是,手机这东西却能够24小时不间断的陪着用户,消息推送机制更是让用户变得永久在线,随时可响应。我很兴奋,但是却高兴不起来。
我是一个Web程序员。我喜欢写PHP,喜欢处理Mysql,我能用CSS和JavaScript构建不错的页面。但是我不喜欢Java,也不喜欢写Objective- C,就像那帮做客户端开发的同学不喜欢写网站后台一样。
这样的沮丧持续了挺久,直到我遇到了PhoneGap。其实我有想过通过Mobile Web的方式进入移动互联网,但是在手机上输入网址的体验太折磨了。另外消息推送和本地设备接口(比如摄像头)都是问题。而PhoneGap解决了这一切。简单的说,它就是一个提供js接口调用本地设备接口的浏览器,这个浏览器还可以打包成一个单独的应用,安装到系统,添加到桌面和发布到应用市场。
由于完全基于浏览器,PhoneGap还有一个好处,可以很轻松的跨多个平台。
基于PhoneGap,我用3天的时间,给TeamToy写了一个手机客户端,可以读取工作组的通讯录,可以浏览Feed和发布广播。当然,还能收通知。
虽然算只跳舞的熊,但它的确能工作。这让我不禁想,这东西到底能做什么程度的应用?
PhoneGap只是一个壳,它是不管里边跑的应用长什么样子的,更不会有那些移动设备上常用的控件。
好在有其他的项目提供支持,其中最有名的是两个。一个是 Sencha Touch,一个 jQuery Mobile。
于是我都试用了下,然后我明白了苦头在后边⋯⋯
当时这些项目都还属于发展期,连文档都没什么,需要自己去读DEMO和源代码。
首先我尝试着用sencha touch写了一个微盘的第三方客户端。坦白的说,sencha touch表现不错,在菜单导航和列表拖拽上都明显比Jquery Mobile靠谱。但是sencha touch采用JS来描述整个page的结构,这让你的layout看起来就像一堆json数据。
我很讨厌这样,因为这种级别的可读性让项目很难维护。另外,sencha1版本Bug也不少,比如那个List最后一行能拖拽出来,却永远点不到的问题。现在sencha已经在测试2版本了,据说提供了直接打包成本地应用的工具,这样也许就不需要PhoneGap了。
由于对Sencha Touch的编码方式不认同,我完全转向了Jquery Mobile。JQuery Mobile的方式更容易接受,它完全使用HTML标签进行页面布局,你只需要通过data-role之类的标签来告诉JQM你想干什么就OK了。我用JQM写了Riki.co的移动版,有兴趣的同学可以去体验下:http://riki.co/m/ (这个东西有很多问题,下边我会提到)
JQM最近已经1.0了,成熟了不少,但是问题依然很多。首先是底导航浮动的问题。JQM的底导航实现很诡异,丫是一个浮动图层,根据当前屏幕的高度,把自己降到屏幕最下方,当你拖动页面内容时,这个浮动条还会隐藏。这个效果有多么的BT,真是谁用谁知道。没用过的同学可以到这里去体验下官方版本: http://jqmdoc.sinaapp.com/docs/toolbars/footer-persist-a.html
这其实还不是最难受的,最难受的是,当你把JQM打包到PhoneGap里边后,由于未知原因10次里边JQM能有2~3次取不到浏览器高度,直接造成导航挂掉。
这个问题其实iScroll4 很好的解决了,它使用了相对距离的CSS来固定顶导航和底导航。所以后来我把它给整合到JQM里边,然后天下太平了。
iScroll4还实现了列表拖拽刷新的功能,可以做出iPhone上常用的下拉刷新。
然后是页面切换的问题。JQM和Sencha其实都有,就是在android系列机器上,页面切换时的抖动和闪烁。最开始你注意到的时候,是切换的瞬间页面反白一下,这个问题其实可以解决,用一行CSS就可以了:
- .ui-page
- {
- -webkit-backface-visibility: hidden;
- }
但是,代价是惨重的。首先是会导致性能降低,然后是,当你切到从页面A切换到页面B时,页面A的内容会突然在滑动效果结束后,再闪一下。亲,这是坑爹啊还是坑爹啊。还没完,如果你用的JQM,然后在android系统上用百度或者QQ输入法,那么恭喜,当你在输入文字时,页面会上下不停的抖动,就像ZF要强拆它家似的。
JQM通过Ajax载入的页面都有这个问题,你可以选择关闭Ajax载入,这样每个页面都独立载入,除了速度慢点外,不能忍受的是列表滚动条进度会丢失。这意味着你在列表中部选中的一条内容,查看完后,返回列表时,列表又回到第一条去了。
最后我选择了采用DIV切换的方式。我会在一个页面把所有要用的Page都载入进来,然后display:none;在需要使用的时候再显示出来。这样做的问题是一次读取了较多的内容,会稍微多占点内存,另外没有动态切换效果;但好处显而易见:页面之间的切换速度已经接近原生应用。
我想说的是,JQM是个好框架,但它并不是完全为在PhoneGap里边跑的HTML设计的。它需要考虑资源载入速度和流量的问题,而PhoneGap这种应用资源都放本地的;它在浏览器上可以不断的刷新页面,所以它不用考虑太多内存管理和DOM回收的事情,而对PhoneGap里边的应用来讲,这直接决定了应用的稳定性。
这些差异决定了一个专门为PhoneGap这种应用设计一个框架是必要的。而目前没有一个好的框架解决掉我提到的这些问题,我们只能小心的绕过这些一个个的雷点。( 如果你愿意写一个这样的框架,我可以提供一个新浪的全职职位 :) )
虽然我吐了一肚子的苦水,但是最终结果是很不错的,我现在已经能以天为单位开发一些社交和资讯类应用了,而这些应用可以直接运行在iPhone,Android和芒果上。
更好的消息是你不用再被折腾一遍,因为我有个东西给你。
那就是我在历经折磨后,做出的一个叫做LazyMobile的应用模板。
它其实就是一个已经写好的应用,你可以直接修改它,添加自己的功能。它看起来是这个样子的:
这东西基于JQM和iScroll。
首先它用iScroll4解决了底导航固定的问题,在android和ios上都很完美,下拉刷新也是可以用的。
然后它通过Tab切换来载入其他页面,效果接近原生应用,但是不要在一个List里边放太多的数据,少放点,动态加载和实时回收item项。我已经做了一个两级导航,应该够用了,微博客户端也就用到二级导航。
它用JQuery的ajax函数从服务器端读取json格式数据,然后用jquery.tmpl进行渲染,目前这个地方会消耗不少CPU,但暂时没有更好的办法。
另外,它还用localStroage存储了上次网络请求回来的json数据,这样在网络断开时,依然可以显示内容。
这个项目完全是一个副产品,所以我不保证会维护它。不过你已经知道了它的大多数细节,我相信Web程序员都能很好的使用它。项目地址:http://code.google.com/p/lazymobile/
原文链接:http://ftqq.com/2011/12/12/the-days-develop-apps-using-phonegap/
【编辑推荐】
相关推荐
1. 缺少某些功能:例如,PhoneGap桌面开发工具可能没有打包应用的功能,这时开发者可以通过PhoneGap官方提供的在线打包平台(***)进行打包,或者在本地搭建完整的开发环境来完成此工作。 2. 功能单一:目前PhoneGap...
在实际应用中,PhoneGap可以用来做各种类型的应用,比如在示例中提到的新闻网站。开发者可以通过JavaScript与服务器交互,获取新闻数据,然后在WebView中展示。此外,还可以利用PhoneGap的Plugin机制扩展功能,如...
- 在PhoneGap中,可能需要等待`deviceready`事件触发后再进行任何与PhoneGap API相关的操作。 - 对于复杂的交互,可以考虑使用自定义插件,这样可以在JavaScript和Java之间创建更复杂的通信机制。 通过以上步骤,...
在实际开发中,数据存储和网络通信也至关重要。PhoneGap支持使用SQLite数据库进行本地数据存储,以及使用Ajax进行HTTP请求与服务器通信。开发者需要理解如何操作这些功能,以便实现应用的数据管理和网络交互。 用户...
在实际开发过程中,可能还需要安装其他辅助工具,例如Git(用于版本控制),以及像jQuery、Bootstrap或Ionic这样的前端框架,以提升Web应用的性能和用户体验。此外,理解Android的Manifest文件、资源管理和权限管理...
在本教程中,我们将深入探讨如何使用PhoneGap结合地图API进行移动定位地图开发。 首先,PhoneGap是一个开源框架,它基于Apache Cordova,旨在通过简单的Web技术构建原生移动应用。PhoneGap提供了一个桥梁,使...
PhoneGap是一种开源框架,它允许开发者使用HTML5、CSS3和JavaScript来构建原生的移动应用程序...尽管它简化了开发流程,但理解原生iOS开发的基本概念仍然是很有帮助的,因为这将有助于解决PhoneGap无法覆盖的复杂问题。
总的来说,PhoneGap移动开发框架为开发者提供了高效、灵活的跨平台开发工具,降低了进入移动应用开发的门槛,使得更多的Web开发者能够参与到移动应用的创新之中。随着技术的不断演进,PhoneGap也在持续更新和改进,...
此外,PhoneGap 的安装和使用也相对简单,开发者只需关注编写Web页面,将其集成到PhoneGap环境中即可。 然而,PhoneGap 存在一些不足之处。首先,由于其本质是基于Web技术,因此在运行速度和UI响应上通常不如原生...
phonegap开发工具
在这个“phonegap Cordova开发demo”中,我们将深入探讨这两个工具,以及如何利用它们将H5界面快速集成到跨平台的应用程序中。 PhoneGap是由Adobe开发的一个开源框架,它基于Apache Cordova。PhoneGap提供了一个...
在"PhoneGap开发中JS与Android之间的交互"这一主题中,我们将深入探讨如何通过JavaScript调用Android的API,以及如何处理Android与JavaScript的通信。 1. **PhoneGap架构** PhoneGap基于Cordova,它的架构分为三个...
由于标题强调了实例,所以该书可能侧重于提供实际的开发案例,帮助读者通过实践来掌握PhoneGap技术。描述中提到“对英语要求不高”,表明尽管是英文原版,但书籍内容应该易于理解,适合英语基础不强的读者学习。 从...
PhoneGap的核心理念是通过Web技术实现跨平台的移动应用开发,同时能够访问设备的硬件功能,如摄像头、GPS、存储等。这个"phonegap开发插件合集"是一个包含了多种PhoneGap插件的资源包,覆盖了Android和iOS等多个平台...
6. **事件处理**:PhoneGap中的事件处理机制允许开发者监听和响应设备特定的事件,如deviceready(表示PhoneGap准备就绪)、pause(应用进入后台)和resume(应用回到前台)。 7. **打包与部署**:完成开发后,...
- 提供的"Sample"文件可能是一个实际的PhoneGap开发实例,包含了从创建基本页面结构到调用设备API的示例代码。 - 通过研究和运行这个样本,你可以更深入地理解PhoneGap的工作原理和实际应用。 通过学习和实践这些...
尽管PhoneGap努力提供跨平台的API支持,但某些功能在不同平台上的实现可能不完整。随着各个平台的发展,PhoneGap的API支持也在不断改进。 总结来说,PhoneGap提供了一种高效的方法,让Web开发者利用他们的技能创建...
在"Phonegap在安卓平台上的插件开发"这个主题中,我们关注的是如何在PhoneGap应用中创建自定义的插件,以便将前端HTML与Android的原生代码连接起来。具体来说,这个例子涉及到将一个字符串从前端传输到Android的原生...