基于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自适应屏幕方案探讨

时间: 2024-09-08 11:02:29

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

phonegap开发app,通过插件调原生android的手势密码,设置好密码后,如何设置标志位?

问题描述 phonegap开发app,通过插件调原生android的手势密码,设置好密码后,如何设置标志位? phonegap开发app,通过插件调原生android的手势密码,设置好密码后,如何设置标志位,需要保存一个变量告诉html,下次登录时用手势密码,html的都存储在window.localStorage里,可是原生的java代码不可以访问window.localStorage,如何使两者可以沟通

应用-基于andorid开发app是否要有独立pc端软件

问题描述 基于andorid开发app是否要有独立pc端软件 大型局域网内现有成熟运行的系统A,想开发一款app名为B,B的数据通过接口与A相连信息交互.所以B是否还要开发相应pc端应用,还是将A扩展? 解决方案 手机app其实就是C/S架构,你的app就是客户端,系统A就是服务端,使用http交换数据就可以了,不需要再开发其他的了,只要你的A系统有对外可调用的接口即可. 解决方案二: 直接开发电脑服务端接口,提供调用.可以参考RESTful 架构 解决方案三: 我知道你的意思,只要你在服务端开

phonegap开发app中踩过的那些坑

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

阿里沈询:阿里技术架构演变,及基于EDAS的敏捷服务开发与架构实践

8月30-31日20:00-21:30,一场别开生面的技术大会-- "蚂蚁金服&阿里云在线金融技术峰会"将在线举办.本次将聚焦数据库.应用架构.移动开发.机器学习等热门领域,帮助金融业技术开发者深入解析互联网应用的前沿应用与技术实践. 蚂蚁金服&阿里云在线金融技术峰会专题:https://yq.aliyun.com/activity/109 峰会统一报名链接:http://yq.aliyun.com/webinar/join/38 来自阿里巴巴的资深专家王晶昱(花名:沈

DotNET企业架构应用实践-基于接口开发介绍以及应用场景和案例

基于接口开发介绍          基于接口编程的本质是分离对象的实现与使用者之间的关系,即变更以下对象结构的依赖变化:                这样说的好处是客户对象依赖于服务接口,即在开发过程中我们只关注于服务接口的定义,而不关注于服务对象的具体实现,客户对象只有在运行期才通过解耦与后期绑定辅助工具(类)与具体的服务实现对象动态的建议依赖.          这样做的好处是很显然的,从技术上讲,如果把服务接口与服务实现分别放在不同的组件之中,那么修改了服务实现组件,我们不用重新编译客户

开发app需要角色

开发app需要角色: 开发一款手机APP应用软件,需要多个流程.多种工作角色分工,简单说明如下: 1.开发流程包括: (1)用户需求分析 (2)产品原型设计 (3)UI视觉设计 (4)数据库搭建 (5)服务端开发 (6)iOS客户端开发/Android客户端开发 (7)APP测试 (8)上传到应用商店. iOS提交到苹果的App Store,安卓的提交到国内各大安卓应用商店. 2.对应的工作职位包括: (1)产品经理 (2)UI设计师 (3)数据库架构师 (4)服务端工程师 (5)iOS客户端工

开发APP不搞清楚这20个问题,必然沦为一场灾难

移动经济的高速增长极大刺激了企业和个人的APP开发热情,从卖野山鸡的到卖无人机的,从老大妈到小正太都跃跃欲试,更不要说那些传统企业的信息主管们了. 面对今天如过江之鲫的APP市场,很少有人意识到,移动开发其实是一个巨大的"坑",真正的挑战来自开发阶段的需求变更.产品推出后的迭代.app运营中的各种微调和如何支撑各种推广渠道的要求等.在动手开发APP之前,无论你是有现成的开发团队还是准备外包,都应当扪心自问以下20个问题: 1.你打算发布到哪些平台上?有计划吗?iOS/Android最近

寄生型设计模式在Swing应用开发中的实践

问题背景 在基于 Java 开发的电信级系统中,会有大量的 GUI 界面设计工作,但众所周知 Java 的目前的 IDE 解决方案对 Swing 界面开发支持的友好性不尽如人意,要做出友好的界面还是要耗费大量的时间,对有些模块可能比业务 逻辑的工作量还要大.所以,现在对于 GUI 界面比较多的系统中,很多公司都会用到界面引擎和 XML 方式来自动生成界面 ,优点在于: 1.使用 XML 文档描述界面,通过界面生成引擎来解释 XML 文档并最终产生显示的界面.这使得开发 界面更加容易,界面风格更加

DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践

本文讲的是DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践[编者的话]本次分享主要介绍了爱油科技基于Docker和Spring Cloud将整体业务微服务化的一些实践经验,主要包括: 微服务架构的分层和框架选型 服务发现和配置管理 服务集成和服务质量保证 基于领域驱动设计 实施DevOps 从单体应用到微服务 单体应用 对于单体应用来说,优点很多,例如: 小而美,结构简单易于开发实现 部署门槛低,单个Jar包或者网站打包即可部署 可快速实现多实例部署 然而随着业务