基于phonegap开发app的实践

app开发告一段落,期间遇到不少问题,写篇文章记录一下。

为虾米要用phonegap

开发app,至少要考虑android和ios两个版本吧,android偶可以应付,ios表示完全木有接触过,于是时间成本、开发成本上去了。phonegap则解决了这个问题,而且对po主而言,用web开发的方式来搞app很爽啊有木有!

当然,用之前还是要调研下,基于phonegap的app有木有成功案例。大公司里腾讯的qq邮箱ios版,豆瓣的豆瓣音乐人都是基于phonegap。重点看了看豆瓣音乐人,很无耻的反编译了一下apk,居然代码都木有压缩过 ,正好方便了偶研究。

豆瓣音乐人的实践

从体验上讲,豆瓣音乐人和native的app还是有差距,首先,点击tab有明显的延迟,另外,豆瓣音乐人整个页面只有一个view,即下图中的frame(view可以理解为app的一个界面,每个app看成是由很多个视图界面组成的),视图之间的切换效果,是先在frame下面再创建一个新frame,里面是将要切换进来的视图代码,然后用css3 transform做视图切换动画,动画结束之后,把原来的frame删除。也就是,在页面中保证只存在一个frame。

这么做应该是基于性能考虑,但是牺牲了部分体验,比如一个列表,滚动到第3屏,点到列表详情,再返回,视图不是停留在点进详情页之前的位置,而是回到了顶部。

豆瓣音乐人其实还是以浏览为主的app,功能比较轻,而我们的app则是包含了发帖、传图片等功能,表示鸭梨很大,但值得尝试。

技术方案

整体技术方案是:

phonegap负责和底层OS通信,调用摄像头、获取网络状态等

backbone+underscore做路由以及视图渲染

iscroll做布局

css3做动画效果

路由及视图管理

整个app其实是个single page application(SPA),对于SPA来说,路由和视图的管理很重要,我用了backbone+underscore来做这个事情。

通过backbone的router实现不同hash值对应不同视图,视图里用到的模版用underscore。

app布局

典型的app布局如下图,header和footer固定,中间内容可以滚动,第一个想到的就是用position:fixed,但是po主google一下,android 2.x,ios5以下不支持position:fixed,然后po主看到了业界比较推荐的iscroll,试了些demo,po主就决定用iscroll了。

用iscroll有以下几点好处:

1、很容易实现app的布局,而且每个视图是用的绝对定位,这样做视图切换动画的时候很方便

2、下拉刷新,上拉加载也一并实现了

3、iscroll自带左右滑动的手势功能

弊端:

1、滚动区域里图片多了,低端机卡爆- -

2、iscroll引发的“fake click”问题

其他倒没有什么弊端了

视图切换

考虑到体验问题,没有采用豆瓣的做法, 其实本来我是想用angularJs而不是backbone+underscore,但是angularJs的视图切换原理也是先append一个frame,动画结束再删掉这个frame,这种做法一是无法保留原有视图的状态,第二视图渲染是需要时间的,导致动画切换时,下一个视图会有很短暂的空白时间。

所以我的做法是,多个视图并存,要展示哪个视图就加上current,并调用计算视图相对位置和滑动动画的函数。

屏幕大小及分辨率适配

屏幕大小:布局要自适应不同的屏幕大小,所以固定宽度神马的尽量少用,改用百分比

屏幕像素密度:主要影响到css里引用的图片,以及页面中展示的图片(即img标签的图片),豆瓣音乐人的做法是对不同密度提供不同的图片,但是po主比较懒,只针对像素密度为2的做了一套,比如有个叫icon的div,我们可以这样

.icon{

width:20px;

height:20px;

background: url(‘../images/icon.png’) no-repeat 0 0;

background-size: contain;

}

icon.png的大小其实是40*40,这样虽然有点浪费资源,但是减轻了工作量啊有木有 

对于页面中的img标签,提供的图片也是2倍展示宽度的,这个倒是浪费部分用户流量了- -

其他

dom操作和事件还是用的jquery,不要问偶为什么- -

关于开发中遇到的各种问题,请看下一篇

参考文献

豆瓣音乐人app的PhoneGap实践

移动Web单页应用开发实践——页面结构化

web app自适应屏幕方案探讨

基于phonegap开发app的实践

时间: 2024-10-12 18:04:03

基于phonegap开发app的实践的相关文章

phonegap开发app中踩过的那些坑

把遇到的问题列出来,如果有解决方案的,偶也会写下来,如果大家有更好解决方法的,欢迎留言噢 phonegap 2.9无法触发deviceready事件 亲们可以看下控制台有木有报错,如果有提示cordova_plugins.json 404 (Not Found) ,就在www目录下新建个空文件,命名为cordova_plugins.json就好了,cordova初始化的时候会请求这个文件,但po主还没发现这个文件有啥用,但是没有这个文件的话,cordova初始化失败,自然不会触发devicere

使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度

上一篇博文使用PhoneGap开发基于Html5应用一:PhoneGap简介 中我介绍了如何从phonegap官网上下载源码并启动第一个应用,今天我们把phonegap的应用稍微改一下,让他实现几个比较牛叉的功能: 1.启动一个网页 2.启动摄像头 3.启动定位 老规矩,在实现这几个功能之前我们先讲一下原理性的东西: 首先我们先回顾一下上次说的,其实phonegap应用中有个特别的webview,它就是CDVViewController,关于这个类我们后面再详细描述,现在我们先了解这个类到底做了

phonegap+html5开发app的一些总结

1.Css3圆角白边:使用css3圆角效果时,在android某些机器上会产生白边,所以应该在圆角的div外套一个div(背景色和外部相同),然后有圆角效果的div 内部使用自己的背景色 border-radius:5px; box-shadow:inset 0 2px 5px #e1e1e1; <div style=””> <div style=”border-radius:5px;box-shadow:inset 0 2px 5px #e1e1e1;”> </div>

[Android_HTML5]基于PhoneGap(Cordova)框架的HTML5开发

PhoneGap是一套能让你使用HTML5轻松调用本地API接口和发布应用到商店的应用开发平台.官方说有低成本,低开发周期,轻量化等优点,这些咱暂时也没法证明,略过不表.但是有一条跨平台,却是很明显的优势.因为它采用HTML5+JavaScript的模式来开发应用.PhoneGap用JavaScript统一封装了几大平台的本地api(Andriod,IOS,WP8/7,WINRT)等等..这样的话从一个平台移植到另外一个平台只需要把HTML代码跟JS原封不动的拿过去,打包一下就可以了.Phone

使用PhoneGap开发基于Html5应用一:PhoneGap简介

兄弟们,我胡汉三又回来啦! 1.何为PhoneGap 之前我的一个客户有这么一个要求:开发一款移动应用,但不需要做成本地应用,而是做成一个类似网页一样的应用.这样我们只需要在浏览器里访问他们公司的这个应用的网页就可以实现本地化应用的基本功能.但有个问题是,出于安全考虑,android,iOS都没有提供通过浏览器调用手机设备中的摄像头,GPS定位等设备的接口(iOS提供了部分).为了实现这个功能,PhoneGap是个超级可爱的东东就产生了. 如果亲爱的你曾经做过iOS或者Android开发的话应该

HBuilder开发App教程01-推开前端开发App的大门

奇妙的前端,奇妙的js 众所周知,自从js有nodejs后,前端人员可以华丽的转身,去开发高并发非阻塞的服务端程序, 随着html5的出现,伴随一些amazing的特性,h5开发app的技术越发的成熟, 自从2008年国外推出phonegap后,前端人员又踏上开发app的路程, 今年来国内也对应推出了一些可以让前端人员开发app的ide, 不过大部分是收费的,强定制的,这里就不一一列举了. 这里推荐DCloud推出的HBuilder,一句话谁用谁知道. 一次开发两种app 通过HBuilder的

使用The PhoneGap Developer App实现快速调试项目

如今,基于 PhoneGap 的混合 APP 开发技术更加成熟,优势更加凸显.移动互联网的迅猛发展,Android 和 iOS 的版本快速迭代,使 HTML5 的性能问题逐步解决.仅仅在 PhoneGap 官网上,已经有来自第三方开发者提交的数百项插件,涵盖了 APP 开发的各个方面,大大扩展了 PhoneGap 的功能体系. PhoneGap 官方推出了新的调试工具 The PhoneGap Developer App .这是一款由 PhoneGap 开发的APP ,安装在手机上后,可以通过

[PhoneGap]开发环境搭建与简单应用

目前,随着Google的Android手机和苹果的iphone手机的逐渐普及,越来越多开发者加入到移动应用开发的大军当中.其中,Android应用是基于Java语言基础上进行开发的,而苹果公司的iphone则是基于C语言开发的.如果开发者编写的应用需要同时在不同的移动设备上运行的话,则必须要掌握多种开发语言.而为了进一步简化移动应用的编程,Nitobi公司推出了一套开源的移动应用解决方案PhoneGap(http://www.phonegap.com). PhoneGap是一款开源的手机应用开发

金牌导购系统开发app平台

金牌导购系统开发app平台,金牌导购系统定制开发,金牌导购系统软件开发,金牌导购系统开发平台 金牌导购系统开发 金牌导购系统找[帆度]:134-2220-2839(谢凡) 金牌导购系统平台开发 金牌导购系统定制 金牌导购系统平台搭健 金牌导购系统软件开发 金牌导购系统APP开发 在互联网出现之前,人们购物必须到线下门店中去,人需要围绕着门店.围绕着物品开展活动.而互联网出现后,人们不再需要到线下门店完成购物,电商平台.厂商和物流商都在围绕着用户需求进行活动.我们的商业模式由"人围绕着物转&quo