代驾app系统开发如何推动出行服务的智能化与便捷化
708
2023-01-26
本文目录一览:
想要设计App的整体框架,首先要清楚我们做的是什么
一般我们与网络交互数据的方式有两种:主动请求(http),长连接推送
结合网络交互数据的方式来说一下我们开发的App的类型和特点:
数据展示类型的App:特点是页面多,需要频繁调用后端接口进行数据交互,以http请求为主;推送模块,IM类型App的IM核心功能以长连接为主,比较看重电量、流量消耗。
手机助手类App:主要着眼于系统API的调用,达到辅助管理系统的目的,网络调用的方式以http为主。
游戏:一般分为游戏引擎和业务逻辑,业务脚本化编写,网络以长连接为主,http为辅。
一般我们做的App都是类型1,简要来说这类app的主要工作就是
把服务端的数据拉下来给用户展示
把用户在客户端修改的数据上传给服务端处理
所以这类App的网络调用相当频繁,而且需要考虑到网络差,没网络等情况下,App的运行,成熟的商业应用的网络调用一般是如下流程:
UI发起请求 - 检查缓存 - 调用网络模块 - 解析返回JSON / 统一处理异常 - JSON对象映射为Java对象 - 缓存 - UI获取数据并展示
这之中可以看到很明显职责划分,即:数据获取;数据管理;数据展示
确定了职责,就可以进入正题了
1. 传统的Android App架构
Android最原生也是最基础的架构,可以理解为MVC,Controller即是Activity和Fragment,但是这两者掌握了Android系统中绝大多数的资源,并且在内部直接控制View,因此传统的Android App一般是以Activity和Fragment为核心,将网络模块,数据库管理模块,文件管理模块,常用工具类等分离成若干工具类包,供Activity和Fragment使用。
这是比较基础的Android项目架构,市面上大部分App都是这种造型
优点:就是开发简单,以页面为导向;如果构建水平可以,项目就已经基本实现模块化,基于Activity,Fragment这这两个上帝般的存在,很多事情直接就妥了,不用绕。
缺点:维护难,因为是以页面为导向的,有些需要共用的业务逻辑就会很烦,don't repeat your self, 你要不要repeat ?不想repeat就要写模块,慢慢的项目就会多出一堆乱七八糟的小模块。另一方面,测试很困难,因为所有的数据处理都在Activity和Fragment,假如现在想先用假数据显示,就要直接改Activity和Fragment的数据控制逻辑。
还有个最恼火的问题,那就是业务复杂起来后Activity和Fragment的代码量激增,举一个例子,电商App的购物车,如果只是管理一下购物车中的商品,无非就是查、删、改调用,列表管理,300多行代码应该就搞定了,假如现在加了个优惠券提示呢?光优惠券不够,还有满减,还有凑单,要计算运费。还要能领取优惠券…… 噢,忘了一般来说还有一个商品推荐,好了现在有两个列表要管理了,你觉得CartActivity 2000行代码能止住么?
在上面这些缺点的描述中,可以看到一个很大的痛点在于:Activity和Fragment不应该管这么多数据处理逻辑
2. 分层架构
如果仔细看自己的项目,可以发现绝大多数数据处理的代码是不需要使用Activity和Fragment持有的资源的(比如Context),而很多时候我们需要多个页面共用一套数据和请求逻辑,很经典的例子是应用中的User对象,一般来说都是全局单例。
这些全局的数据源写多了,很容易就能想到将数据处理统一抽出来形成一层,向上层提供数据接口,而上层并不关心数据的来源(内存,缓存,网络),因为不用从Activity和Fragment拿资源而且主要工作是数据处理,所以这一层是UI无关的,大幅提升了复用性,我把这一层称为DataManager层。
这是我一个项目的包结构
Activity和Fragment剥离了数据处理的责任后,持有DataManager的引用,负责获取数据并展示,向DataManager传递数据,绝不进行网络请求和缓存读写。
手机APP制作流程:无需技术,教你制作一个自己混合app开发架构设计的手机APP
一款手机APP混合app开发架构设计的制作,说复杂非常复杂,涉及到多个领域的研发,稍复杂一点的个人研发基本上搞不定,但是,也有非常简单的手机APP一站式制作运营方法。
随着移动互联网基层开开发技术的发展,无需编程技术,也可以在-制作手机。这里就以-为例,教您熟悉手机APP制作流程,手把手教你制作一款自己心仪的手机APP。
第一步:了解自己想要制作一款怎么的手机APP。是软硬件结合? 游戏 类?商城类?新闻资讯类?互动类?聊天类?还是团购类、同城服务类?送餐类?企业展示类?
每一个类别的APP开发差异非常大,主要就是不同类型所需要的功能支持。对自己想要做的APP有个大致的了解,但是这一步很多人都没搞清楚,大部分人都存在一个大概模糊的创意、想法阶段。
第二步:了解自己想要做的APP的基础功能,划分板块。
对基础功能的了解、板块的分类,上手最快的方法就是:查看市场上类似的APP进行借鉴。
第三步:界面及交互的设计
界面及交互的设计,可以直接使用“墨刀”。可以先设计一个大概,后期不断丰富。
第四步:APP功能的开发制作
APP功能的开发直接使用-就可以了。-把市场上常见的APP功能进行拆分组合,你不需要懂任何编程技术,只需哟安把需要的功能挑选出,组合搭配一个,就能迅速组建出一个手机APP。
手机APP制作具体流程:
1、打开-的官网,点击“开始制作”,注册登录;
2、-为在线APP制作平台,所以不需要-任何东西,直接进入制作页面就可以;
3、-目前有两种模式:
(1)主题模式:-平台上,已经很多已经制作完善的手机APP软件,可以直接当做模板使用,仅需要把里面的文字图片进行替换,就可以快速制作一款APP。
(2)自由模式:就像拼图一样,把需要的功能自由组合搭配一下,就可以创造一款独一无二的手机APP。
每一个功能控件的具体功能,都通过后台自动配置。
4、手机APP打包
制作完善后,在-平台直接点击制作完成,就会自动打包成手机安装程序。
5、应用发布上架
在-平台直接申请应用发布,通过联网后,就可以联网使用了。
6、-管理、运营
-提供运营管理后台、-站点、-二维码、手机管理助手等APP相关产品,一站式服务,自动配置,免去多次开发成本,而且后期的功能、内容的更新迭代自己既可以搞定,也不需要具体的编程技术。
自己制作app需要 编程知识 。但依靠第三方工具,三分钟就可以做成专属自己的APP。下面以简易网为例演示:
简网APP工厂三大特点
1、最低的成本:节省所有开发成本,以及仅几分钟的时间成本。
2、实用的功能:贴近传统网站的内容编辑与发布方式。
3、灵活的运营:生成APP后,一个人也可以完美运营。
先来了解一下APP工厂:三分钟制作APP
使用简网APP工厂之前,我曾经通过其他类似的APP公司制作过两三个不同版本的免费APP,简网的操作流程是制作门槛最低的一家。
不支持用户名注册,需要使用微博账号
新浪与腾讯微博用户数几乎覆盖全网网民数,我们默认用户已经拥有微博账号,以便于进行APP快速创建。
填写APP信息:几分钟搞定
制作APP之前我们需要做一些准备工作,比如我们要明确我们要做一个怎样的APP,我们要为这个APP准备一张1024x1024的ICON以及一张114x114的小图标,另外还需要一张640x1136的开机图。
从简网APP工厂的首页,经过3次跳转,省略了网站注册过程,通过模板挑选完成APP美工定案,所需的是APP的图标与应用简介。全过程几分钟足矣。
快捷实用的后台采编系统
我们制作了一个新闻资讯类的APP软件,同时我们拥有了一个功能齐全的后台更新系统。利用后台可以完全解决APP内容更新问题,可以快速进行新闻发布,包括文字、图片、视频、微博等形式,并且引入了完善的评论系统与社区系统。
笔者至今使用过三家大型网站的后台系统,由于种种 历史 原因,这些后台系统都存在或多或少的不合理设计,也许是因为承载的功能过多,数据架构过于复杂,在新入职人员上手操作时,需要经过长时间的熟悉过程。
简网为我们制作的APP提供了统一的后台模板,这个后台的功能亮点在于不仅提供原始录入,还提供也许是目前设计最为合理的网络来源抓取功能。包括网页、微博在内的网络内容,都可以在大约1分钟时间内导入后台中,并且实时呈现在用户手机上的APP客户端。
APP的生成时间约为三分钟,APP容量只有3M,一般的宽带都可以在1分钟之内-好装进手机
我们得到了一个可安装的APP软件
同时获得了一个功能完善的编辑后台
快速的内容抓取,让后台采编人员的数量可以降到最低,维持一个日更新量在100篇文章左右的APP客户端,一个工作人员足矣。
内容采编神器:发布到应用
“发布到应用”这个功能可以说是管理后台提供的最强大的一个功能,经过简单的设置后,我们可以在几秒钟之内把网络内容发布到我们的APP客户端。
这样一个媒体类APP就做好了。
很高兴回答这个问题。
我是从事安卓App开发的,开发过很多App,那么App是如何制作的。
页面设计我们看到的app都一个个页面,每个页面功能不同。首先是产品经理通过调研整理需求,然后将需求整理成页面(可以使用墨刀等网页制作),然后在交给UI人员进行专业设计和美化,最后将设计图打包给开发人员。
开发设计拿安卓举例,开发使用语言也分几种,具体得根据实际情况来选择。
1.原生开发
安卓一般使用java语言开发,当然现在也有kotlin语言进行开发。如何开发就涉及到具体编程了,这里就不详说了。简单描述就是使用安卓提供的一系列控件来实现页面,复杂点的页面可以通过自定义控件来实现。
2.使用H5语言开发
使用H5开发的好处有很多,可以多端复用,比如浏览器端,ios端,当然H5开发的体验是没有原生好的。结合我做过的项目来说,一般是这个页面需要分享出去的话,就用H5开发。
3.使用flutter开发
flutter是近年来谷歌推出的一款UI框架,
使用dart语言进行开发,支持跨平台,weight渲染直接操作硬件层,体验可媲美原生。但是flutter技术比较新,生态还不完善,开发起来效率相对偏低
页面数据填充页面开发出来只是空壳子,没有数据填充,这时候就需要通过接口获取数据,然后解析数据,显示在页面上。
到此,一个大概的App制作流程就结束了。
首先你要清楚自己想要什么样的APP,是做哪一方便的?简单的?还是复杂的
一下我就分为两类进行回答
一,简单APP必要岗位
ui设计师(至少一个)
主要负责APP页面的搭建和交互的梳理
客户端开发人员(至少一个)
目前市面上的APP开发方式多为混合开发,如果做一个简单的APP可以选择webapp,这样不但可以减少开发周期还可以控制开发成本
服务端开发(至少一个)
目前服务器语言很多php,java,
node.js
非必要岗位
首先 ,我说的非必要岗位不是说这些岗位不重要,而是说在为了减少成本的情况下,这样岗位可以被别的岗位所替代
产品经理
如果开发的App功能简单,UI设计师就可以担任这样职责
测试工程师
当然,在时间允许的情况下,开发人员也可以是测试人员
复杂app可以考虑纯原生开发,那么客户端至少两个人进行开发(安卓,IOS),或者考虑混合开发,及web前端+原生开发人员
必要岗位
ui设计师,安卓开发工程师,ios开发工程师,后端开发工程师,产品经理,测试工程师,人员的多少可以根据项目的大小来定
服务器 :这是开发app必须要的,也就是我们放代码的地方
上架审核所需费用 :比如IOS上架审核的花好几百,安卓要申请软著等
今年六月的时候,萌生了开发一个记账 App 的想法,想去用自己的 App 记账,管理收支。那时正好在英国是考试周,放假后,我回到了国内,准备去实现我的计划。没想到这暑假很快就结束了,在这个暑假中经历的太多的事,准备了要去美国读研的考试,遇到了生命中的另一半,同时,也将 Costuary for iPhone 带到了这个世界。
Logo
说道为什么要开发这样一个 App ,因为笔者在 UK 读书,市面上很少有记账 App 能够实现实时汇率的换算,带有这个功能的 App 也是操作繁杂。所以要自己开发一个,功能并没有那么复杂的,并且能够满足自己在国外和国内生活需求的 App,所以自己编写了 iPhone 的客户端,为了获取汇率和 Excel 导出,又用 Java 设计和编写了 Costuary 的后端服务器。
比起今年年初开发的 Flat Weather,这个项目的代码量大约是他的十倍,需要实现众多的功能和模块。
这篇文章将会介绍一下 Costuary 的功能与我开发过程中的一些心得。
效果图设计
说到设计,两年前,我还是一个 Android 开发者,Google 的 Material Design 是我的最爱,所以,Costuary 采用了 Android 5.0 之后采用的 Material Design 设计。其中掺杂了一些我自己的设计,因为 Material Design 的控件有时候操作繁琐。
早在 5 月份的时候已经零零总总的用 Sketch 画出了这个产品的 UI 和图标,之后开始了漫长开发的过程。
Sketch交互
与去年开发的 Android 版不同,iPhone 版的 Costuary 采用了底部导航栏的设计,相比于 Android 通常使用的 Navigation Drawer 的抽屉布局,底部导航栏的设计即使在右手操作 iPhone 的时候都不会太费力。
UX功能 Features
Costuary 支持世界上主要货币的实时汇率转换,所有外汇在统计时会转换成主货币的数目,方便查看花销。
日历视图能够很直观的反映出哪一天有消费和收入。
说到记账软件,量化消费的图表无疑是重要的一环,Costuary 提供了饼状图来视觉化一段时间的花销。
可以建立多个账户来表示自己的银行卡,支付宝,现金等等。
可以看出本月的预算还有多少。
如果想要进行更加详细的分析,可以使用导出功能将账本导出到 Excel。
允许备份账本内容到 iCloud。
开发
去把一纸设计变成真正的产品,这是一个独立开发者应该具有的能力。只会写代码不只是我唯一掌握的,能够去设计出来自己想要的应用并且将他实现才是我在做的事情。
这款应用的开发并没有想象中的简单,需要自己去实现大量 Android UI 控件,很多圆角,阴影,字体,要慢慢的去调整,让控件适合 iPhone 的屏幕。整个应用的背后有 3 个关系型数据库来储存账户,账本与各种汇率。与以前开发的 Flat Weather 不同,Costuary 会产生大量的用户数据,所以整个软件架构的稳定性变得异常重要,需要设计一些机制来防止数据丢失与损坏。
Development
为了实现 App 获取每日的汇率,并且在 iPhone 上能够实现账本导出到 Excel ,我设计了一个服务器后端来处理这些繁杂的实物。每次 App 启动后会与我的服务器来更新最新的汇率。当用户选择导出时,账本会被发送到服务器上并处理为 Excel 发送到用户的邮箱里。
说到服务器,就不得不提到用户隐私了,因为导出到 Excel 功能需要将账本传到我的服务器上做进一步处理,很多人会觉得我侵犯了他的个人隐私。对此,为了保护我的权益与用户的权益,我撰写了 Costuary 软件许可及服务协议与 Costuary 隐私政策,这是我作为独立开发者这么多年后第一次去写许可协议。
Agreement资费
与我的其他产品一样,这款 App 依旧是免费供大家使用的,作为独立开发者,我们都知道,绝大多数用户不会去珍惜一个免费的产品。就像 Flat Weather 一样,虽然获得了很多人的支持,但是也收到了很多人的吐槽。在 Costuary 中依然设计了一个的捐助按钮,如果大家使用之后喜欢这个应用,请支持我将他维护下去。
Please donate me尾巴
Costuary for iPhone 是我开发出来过最大的软件体系。我相信,能够独立开发出来产品的人懂得不只是编程。一个人要去经历项目的全部生命周期:规划,设计,开发,运营,维护,营销,这些是我开发这么多产品所学会的。
现在的 Costuary 只是第一个版本,还有很多 iPhone 的特性没有来得及开发,以后会跟上的,比如 iPhone X 的适配,3D Touch、Today Widget、Touch ID 等等。
以前在少数派撰稿的时候,很多读者会来问我如何学习开发,我也特地去写过如何去学习编程,但我相信,真正想去学习的,想去为这个生态贡献出自己的一份力的人,自己都会找到学习的方法。我的专业是电子电器而不是软件工程,但是我不后悔当年去学习编程。
最后,还是感谢在背后默默支持我的人,我会不断地改进与提升,如果 Costuary 真的在记账方面给予了你便利,这是我莫大的荣幸。
如果想要了解我的更多作品可以访问我的个人博客 MikeTech,或者在少数派中阅读我以前写过的文章。今年年初也在 iPhone 上写过一个天气 App,天气应用 Flat Weather 的设计历程
对了,关于记账有什么用,如何记账,如何养成记账的习惯。为什么每个月末都捉襟见肘,除了没钱,很可能是对财务管理的能力不强。想了解这一方面的知识,不妨看一看我派的付费阅读栏目:从零开始做好个人记账
你好,非常感谢你的邀请。
开发一个app的话首先
第一步、需要调研,分析开发需求。
第二步、根据你的开发需求整理一个开发方案,选择合理的架构。
第三步、开始研发。
第四步、测试。
第五步、上线试运行。
第六步、查缺补漏后投入使用。
开发一个app的话。有多种选择。可以找一个第三方公司来进行开发。也可以自己招聘开发团队。也可以交给比较信任的程序员朋友来进行开发。第三种方式的话,属于接私活儿,成本较低。 当然前提你得有认识的人。
我也是程序员出身。参与过web网站开发。传统办公开发。H5开发。微信小程序开发。以及安卓开发。有着较丰富的开发经验。自己完全可以胜任一个App,如果你有这方面的事需求的话,也可以私信我。我是山东的。如果方便的话也可以面谈。
App软件开发,从之前的沟通需求、规划设计、程序开发、测试修改、它的发布等。这是一个非常复杂和漫长的过程,一旦进入通信,就需要定期维护和功能变更。它需要大量的专业人员参与,成本自然很高。 所以,随着更新市场的发展和人们福利的提高,现在已经不像传统开发那么困难了。只需要动动鼠标,不需要触碰代码就可以完成制作app部分。
App开发已成为企业发展的重要推动力量十年巨变混合app开发架构设计!移动互联网已颠覆我们的时代,商业、社交、视频、新闻、工具等领域,移动应用的渗透率已高达95%,在团购 旅游 和零售行业,移动端收入规模已超过PC端,手机APP已成为企业不可或缺的线上阵地。
不用编程就能制作app的在线平台,摆脱了很多复杂的流程,还能减少用户的麻烦,不会制作,而且可以在平台上查看详细的课程,非常贴心的设置!在这里,我想说的是,如果你想制作app的话,可以在平台上查看详细的课程。总的来说,这种方法会大大降低软件开发app的成本,节省时间,让很多人解决了资金短缺和想快速制作app的问题。
app是如何制作的,APP如何开发?随着智能手机APP软件的吸引力越来越大,越来越多的企业开始开发自己的APP应用。企业要想开发属于自己企业的APP应用,首先要分析自身的情况和市场对产品的需求。
在APP,开发这件事上,企业一定要注意以下几点。
1. 开发APP应用一定要明确以自己为中心,开发APP是否能带来巨大的利润。
2. 要了解目标用户的需求,配置APP吸引用户,提高用户购买应用的意愿。
3. 通过合作再次寻找潜在客户,我相信开发APP的收益远远大于成本。
开发APP苹果系统,必须使用Xcode苹果开发工具,一般采用Objective-C或Swift语言。Objective-C是继承了C语言的C字,可以直接用Objective-C语言进行编程。如果你不懂数据,差别很小。还有一些新的苹果后缀语言,非常有用。
Andro系统的app都是用Java语言开发的,Java语言已经流行了20多年,这个趋势还在持续和延续。如果想要安卓系统的app首先要掌握Java语言,对于说C语言的人来说,学习Java还是很容易的。如果你对自学感兴趣,Java网站上有很多培训课程,还有很多免费培训。视频,不想付费。如果这个绝对是零基础(没学过其他编程语言,比如c语言),如果真的很感兴趣,可以自学,但是速度比较慢。
总结:app开发拥有多种方法,选择最适合自己的方式方法很重要答案写到这里,我想您应该知道了app的开发途径或者方法是什么。如果您是小企业或者是个体工商户,您可以找人帮忙开发小程序或者自己在一些网站上进行傻瓜式软件开发。正如上文所说,现在有很多的网站支持在线生成APP,常用的功能和接口都已经设置好了,操作起来不是很难。如果您是大企业,业务多访问量比较大,我的建议是您应该聘请专业的软件工程师开发专门的app,避免后期出现的问题没办法及时解决给您的企业带来损失。
不懂的话,找专业的人帮忙,我就是专业的
app即application program。应用程序。目前手机平台是ios和安卓两大平台的天下。本人不才从事安卓开发。简单介绍一下吧你问的这个问题范围太广。ios和安卓开发语言不同。ios使用的是object_c和swift。安卓是基于java。二者都属于面向对象的语言。开发平台安卓基于android studio早期使用的是eclipse+adt。不过已经被淘汰了。那么怎样开发app?首先你需要一个后台程序员写服务器以及搭建数据库。其次你的会ios或是android其中之一那么这就是最简单的配置.现在流行混合开发如果你再会点前端的h5和js就更好了。一般一个软件公司的基本配置是一个前端一个ios一个安卓一个后台。基本就满足你搭建网站和手机应用的需求了。不过你作为老板养这样一个团队很费钱。还不如找外包
软件的生成需要经历以下几个阶段:
1、满足用户需求——建立软件目标,设想产品功能,进行场景化细分说明;进行可行性分析,用户需求收集,用户需求场景描述;场景问题梳理;获取用户行为、想法;场景应用痛点,机会点
2、需求开发与管理——建立用户画像,从软件目标出发,进行问题梳理,场景行为分析,愿景分析,建立体验地图
3、利用Axure绘制软件原型,在用户场景中切入,并组织软件原型实施,在实施过程中进行问卷调查,收集问题,记录用户行为,不断改善软件需求,进行需求评审,进入评审优化
4、技术可行性分析——技术分析,场景分析,功能实现验证,
5、开发计划制定,实施,测试,验证,发布
一个完整的App开发需要哪些技术?在回答这个问题之前,混合app开发架构设计我们首先要混合app开发架构设计了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己的需求选择不同的App开发。
一、 App有哪些形式
WebApp:简单来说,Web App就是针对iOS/Android优化后的web站点,用户不需要-安装即可访问。一般的web站点测重使用网页技术在移动端做展示,包括文字,视频,图片等,而Web App更侧重“功能”,是基于网页技术开发实现特定功能的应用,必须依赖手机浏览器运行。Web App开发成本低,维护更新简单,支持云修复,用户不用-更新,但是App的用户体验不足,页面跳转迟钝甚至卡壳,页面交互动态效果不灵活,而且可能上不了AppStore,如果企业的核心功能不多,App需求侧重于信息查询,浏览等基础功能,可以选择Web App。
Native App(原生App):Native App是基于智能手机操作系统(现在主流的是ios和Android)用原生程序编写运营的App。Native App运行时是基于本地操作系统的,所以它的兼容能力和访问能力更好,拥有最佳的用户体验、最好的交互界面,但也是开发难度最大,开发成本和维护成本最高的App。
Hybrid App(混合App):是指半原生半web的混合类App,同时采用网页语言和程序语言进行开发,通过不同的应用商店进行打包分发,用户需要-安装使用。Hybrid App兼具Native App良好的用户交互体验和web App跨平台开发的优势,因在开发过程中使用网页语言,所以开发成本和难度大大降低。Native App是现在的主流应用,大型的App如淘宝/掌上百度/微信都是走的Hybrid App路线。
二、开发不同类型的App需要用到哪些技术?
Web App:iOS/Android的内置浏览器是基于webkit内核的,所以在开发webApp时,多数使用html或html5、CSS3、JavaScript技术做UI布局,使其在网站页面上实现传统的C/S架构软件功能,服务端技术用java、php、ASP。现在也有很多一键生成webApp的平台,如百度siteApp/移动开发平台APICloud,APICloud平台提供基于腾讯x5浏览器引擎生成webApp,因为移动端的超级流量入口微信/手机qq等用的也是腾讯x5内置浏览器,所以用腾讯x5浏览器生成的App在移动页面展示时适配于微信的浏览体验,这样可以帮助webApp引流。
Native App:
开发Native App需要根据运行的手机系统采用不同的开发语言,开发Android App需要的开发语言是java,还需要熟悉Android环境和机制。主要知识点如下:
1. 开发环境,Android Studio、eclipse.如何搭建Android开发环境可以去百度。
2. 数据结构,App的某些功能涉及到做算法,所以要有一定的数学基础
3. Android SDK,会API接口开发,包括自行开发API的能力和调用第三发API的经验。
4. 熟悉tcp、IP,socket等网络协议
5. 如果涉及到服务器,混合app开发架构设计你还需要了解webservice相关知识和相应的开发语言,常用有PHP、JSP、ASP.Net.
6. 除了这些功能基础,App开发还涉及到UI设计、框架、性能优化、调试适配等。
Objective-C是开发iOS系统App的主流编程语言,开发者一般用苹果公司的iOS SDK搭建开发环境,iOS SDK是开发iOS应用程序中不可少的软件开发包,提供了从创建程序,到编译、调试、运行、测试等多种开发过程中需要等工具。学习iOS开发可以去看苹果官方文档,这是最权威的ios教程。
Hybrid App:混合开发中主流的是以web为主体型的开发,即以网页语言编写,穿插Native功能的hybrid App开发类型,网页语言主要有html5、CSS3、JavaScript。Web主体型的App用户体验好坏,取决于底层中间件的交互与跨平台的能力。国内外有很多优秀的开发工具,如国外的AppmAkr、Appmobi,国内的APICloud,APICloud的底层引擎用Deep Engine,使用半翻译式原理,将运行中的web翻译成Native API,并且支持扩展API,开发时可调用用原生语言开发的功能模块,以此达到媲美原生App的用户体验,同时节省开发时间。
对企业来说,可以根据自己的需求选择不同的开发类型和开发工具,目前来看,Hybrid App已经成为移动开发趋势,一方面Hybrid App开发时不采用或者大部分不采用原生语言,却能拥有原生应用的特性,一方面随着web技术的发展,Hybrid App技术已经成熟,很多大型App淘宝、微信、携程都属于这种开发模式,Hybrid App给企业移动应用的开发、维护、更新都带来了极高的便捷性,从成本投入用户体验考虑,Hybrid App都是首选。
本文由阿里闲鱼技术团队祈晴分享,本次有修订和改动,感谢作者混合app开发架构设计的技术分享。
1、内容概述本文总结混合app开发架构设计了阿里闲鱼技术团队使用Flutter在对闲鱼IM进行移动端跨端改造过程中的技术实践等,文中对比了传统Native与现在大热的Flutter跨端方案在一些主要技术实现上的差异,以及针对Flutter技术特点的具体技术实现,值得同样准备使用Flutter开发IM的技术同行们借鉴和参考。
学习交流:
- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》(本文同步发布于:http://im-/thread-3615-1-1.html)
2、闲鱼IM现状闲鱼IM的移动端框架构建于2016至2017年间,期间经过多次迭代升级导致历史包袱累积多,后面又经历IM界面的Flutter化,从而造成了客户端架构愈加复杂。
从开发层面总结闲鱼IM移动端当前架构主要存在如下几个问题:
1)研发效率较低:当前架构涉及到Android/iOS双端的逻辑代码以及Flutter的UI代码,定位问题往往只能从Flutter UI表相倒查到Native逻辑层;2)架构层次较差:架构设计上分层不清晰,业务逻辑夹杂在核心的逻辑层致使代码变更风险大;3)性能测试略差:核心数据源存储Native内存,需经Flutter Plugin将数据源序列化上抛Flutter侧,在大批量数据源情况下性能表现较差。从产品层面总结闲鱼IM移动端当前架构的主要问题如下:
1)定位问题困难:线上舆情反馈千奇百怪,测试始终无法复现相关场景,因此很多时候只能靠现象猜测本质;2)疑难杂症较多:架构的不稳定性造成出现的问题反复出现,当前疑难杂症主要包括未读红点计数、iPhone5C低端机以及多媒体发送等多个问题;3)问题差异性大:Android和iOS两端逻辑代码差异大,包括埋点逻辑都不尽相同,排查问题根源时双端都会有不同根因,解决方案也不相同。3、业界的移动端跨端方案为解决当前IM的技术痛点,闲鱼今年特起关于IM架构升级项目,重在解决客户端中Andriod和iOS双端一致性的痛点,初步设想方案就是实现跨端统一的Android/iOS逻辑架构。
在当前行业内跨端方案可初步归类如下图架构:
在GUI层面的跨端方案有Weex、ReactNative、H5、Uni-APP等,其内存模型大多需要通过桥接到Native模式存储。
在逻辑层面的跨端方案大致有C/C++等与虚拟机无关语言实现跨端,当然汇编语言也可行。
此外有两个独立于上述体系之外的架构就是Flutter和KMM(谷歌基于Kotlin实现类似Flutter架构),其中Flutter运行特定DartVM,将内存数据挂载其自身的isolate中。
考虑闲鱼是Flutter的前沿探索者,方案上优先使用Flutter。然而Flutter的isolate更像一个进程的概念(底层实现非使用进程模式),相比Android,同一进程场景中,Android的Dalvik虚拟机多个线程运行共享一个内存Heap,而DartVM的Isolate运行隔离各自的Heap,因而isolate之间通讯方式比较繁琐(需经过序列化反序列化过程)。
整个模型如下图所示:
若按官方混合架构实现Flutter应用,开启多个FlutterAcitivty/FlutterController,底层会生成多个Engine,对应会存在多个isolate,而isolate通讯类似于进程通讯(类似socket或AIDL),这里借鉴闲鱼FlutterBoost的设计理念,FlutterIM架构将多个页面的Engine共享,则内存模型就天然支持共享读取。
原理图如下:
4、闲鱼IM基于Flutter的架构设计4.1 新老架构对比
如下图所示:是一个老架构方案,其核心问题主要集中于Native逻辑抽象差,其中逻辑层面还设计到多线程并发使得问题倍增,Android/iOS/Flutter交互繁杂,开发维护成本高,核心层耦合较为严重,无插拔式概念.
考虑到历史架构的问题,演进如下新架构设计:
如上图所示,架构从上至下依次为:
1)业务层;2)分发层;3)逻辑层;4)数据源层。数据源层来源于推送或网络请求,其封装于Native层,通过Flutter插件将消息协议数据上抛到Flutter侧的核心逻辑层,处理完成后变成Flutter DB的Enitity实体,实体中挂载一些消息协议实体。
核心逻辑层将繁杂数据扁平化打包挂载到分发层中的会话内存模型数据或消息内存模型数据,最后通过观察者模式的订阅分发到业务逻辑中。
Flutter IM重点集中改造逻辑层和分发层,将IM核心逻辑和业务层面数据模型进行封装隔离,核心逻辑层和数据库交互后将数据封装到分发层的moduleData中,通过订阅方式分发到业务层数据模型中。
此外在IM模型中DB也是重点依赖的,个人对DB数据库管理进行全面封装解,实现一种轻量级,性能佳的Flutter DB管理框架。
4.2 DB存储模型
Flutter IM架构的DB存储依赖数据库插件,目前主流插件是Sqflite。
其存储模型如下:
依据上图Sqflite插件的DB存储模型会有2个等待队列:
一个是Flutter层同步执行队列;一个是Native层的线程执行队列。其Android实现机制是HandlerThread,因此Query/Save读写在会同一线程队列中,导致响应速度慢,容易造成DB SQL堆积,此外缺失缓存模型。
于是个人定制如下改进方案:
Flutter侧通过表的主键设计查询时候会优先从Entity Cache层去获取,若缓存不存在,则通过Sqflite插件查询。
同时改造Sqflite插件成支持sync/Async同步异步两种方式操作,对应到Native侧也会有同步线程队列和异步线程队列,保证数据吞吐率。但是这里建议查询使用异步,存储使用同步更稳妥,主要怕出现多个相同的数据元model同一时间进入异步线程池中,存储先后顺序无法有效的保证。
4.3 ORM数据库方案
IM架构重度依赖DB数据库,而当前业界还没有一个完备的数据库ORM管理方案,参考了Android的OrmLite/GreenDao,个人自行设计一套Flutter ORM数据库管理方案。
其核心思想如下:
由于Flutter不支持反射,因此无法直接像Android的开源数据库方式操作,但可通过APT方式,将Entity和Orm Entity绑定于一身,操作OrmEntity即操作Entity,整个代码风格设计也和OrmLite极其相似。
参考代码如下:
4.4 IM内存数据模型
基于Flutter的IM移动端架构在内存数据模型主要划分为会话和消息两个颗粒度:
1)会话内存数据模型交托于SessionModuleData:会话内存数据有一个根节点RootNotice,然后其挂载PSessionMessageNotice(这里PSessionMessageNotice是ORM映射的会话DB表模型)子节点集合。2)消息内存数据模型交托于MessageModuleData:消息内存数据会有一个MessageConatiner容器管理,其内部挂载此会话中的PMessage(PMessage是ORM映射的消息DB表模型)消息集合。依据上一章节,PSessionMessageNotice设计了一个OrmEnitity Cache,考虑到IM中会话数是有限的,因此PSessionMessageNotice都是直接缓存到Cache中。
这种做法的好处是各地去拿会话数据元时候都是缓存中同一个对象,容易保证多次重复读写的数据一致性。而PSessionMessageNotice考虑到其数量可以无限多的特殊性,因此这里将其挂载到MessageContainer的内存管理中,在退出会话的时机会校验容器中PMessage集合的数量,适当缩容可以减少内存开销。
模型如下图所示:
4.5 状态管理方案
基于Flutter的IM移动端架构状态管理方案比较简单,对数据源Session/Message维度使用观察者模式的订阅分发方式实现,架构类似于EventBus模式,页面级的状态管理无论使用fish-redux、scopeModel或者provider几乎影响面不大,核心还是需保留一种插拔式抽象更重要。
架构如下图:
4.6 IM同步模型方案
当前现状的消息同步模型:
如上图所示是,模型中存在ACCS Thread/Main Thread/Region Thread等多线程并发场景,导致易出现多线程高并发的问题。
native的推送和网络请求同步的隔离方案通过Lock的锁机制,并且通过队列降频等方式处理,流程繁琐且易出错。整体通过Region Version Gap去判断是否有域空洞,进而执行域同步补充数据。
改进的同步模型如下:
如上图所示,在Flutter侧天然没多线程场景,通过一种标记位的转化同步异步实现类似Handler消息队列,架构清晰简约了很多,避免锁带来的开销以及同步问题。
5、本次改造进展以及性能对比1)针对架构层面:
在基于Flutter的IM架构中,重点将双端逻辑差异性统一成同一份Dart代码,完全磨平Android/iOS的代码差异性带来的问题。
带来的好处很明显:
1)降低开发维护、测试回归、视觉验收的一半成本,极大提高研发效率;2)架构上进行重构分层,实现一种解耦合,插拔式的IM架构;3)同时Native到Flutter侧的大量数据上抛序列化过程改造程Flutter引用传递,解决极限测试场景下的私聊卡顿问题。2)针对线上舆情:
1)补齐UT和TLog的集团日志方式做到可追踪,可排查;2)针对于很多现存的疑难杂症重点集中专项解决,比如iphone5C的架构在Flutter侧统一规划;3)未读红点计数等问题也在架构模型升级中修复;4)此外多媒体音视频发送模块进行改造升级。3)性能数据对比:
当IM架构的逻辑层和UI层都切换成Flutter后,和原先架构模式初步对比,整体内存水位持平。
其中:
1)私聊场景下小米9测试结构内存下降40M,功耗降低4mah,CPU降低1%;2)极限测试场景下新架构内存数据相比于旧架构有一个较为明显的改观(主要由于两个界面都使用Flutter场景下,页面切换的开销降低很多)。6、未来展望JS跨端不安全,C++跨端成本有点高,Flutter会是一个较好选择。彼时闲鱼FlutterIM架构升级根本目的从来不是因Flutter而Flutter,是由于历史包袱的繁重,代码层面的维护成本高,新业务的扩展性差,人力配比不协调以及疑难杂症的舆情持续反馈等等因素造成混合app开发架构设计我们不得不去探索新方案。
经过闲鱼IM超复杂业务场景验证Flutter模式的逻辑跨端可行性,闲鱼在Flutter路上会一直保持前沿探索,最后能反馈到生态圈。
总结一句话,探索过程在于你勇于迈出第一步,后面才会不断惊喜发现。
(原文链接:点此进入,本次有修订和改动)
附录:更多文章汇总[1] 更多阿里团队的文章分享:版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~