移动端SDK优化的特色与经验分享

内容来源:2017年5月25日,极光高级Android工程师王可为在“极光开发者沙龙”进行《移动端SDK优化的特色与经验分享》演讲分享。IT大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。
阅读字数 :2098 | 4分钟阅读


摘要

结合极光的业务和自身开发经验,极光高级Android工程师为咱们简单介绍移动SDK与APP的区别,以及在作架构设计、性能优化上的一些经验。html

嘉宾分享视频地址

t.cn/RK1X3gj
数据库

SDK和APP的差异

重复造轮子

咱们作APP开发的有这样一句话:“不要重复造轮子。”意思就是但愿快速迭代,每一个APP有本身独有的功能。基础业务能够直接用别人已经作好的框架或第三方的包导入进来,但业务代码必定要作本身独有的。缓存

在体积大小上,SDK和APP就有明显差别。APP的核心代码只需作上面一小块,但这样作的结果是一个APP自己大小有几十兆甚至一百多兆,用户能够接受。而SDK须要作得小,体积在几百K之内,才是开发者能接受的。性能优化

因此SDK不能直接用别人的“轮子”。作基础业务的话,像网络、数据库能够用Android原生的API来作,这样能把体积控制在较小的范围内,APP开发者才会用较小的包去作他们的业务。它的好处就是保持代码的精简,而且内部可见,方便调试和修改。服务器

为了体积,以及优化架构和性能上,咱们要“重复造轮子”。网络

配置

APP只须要开发者根据本身的需求写一份配置列表。多线程

SDK的权限则是交给开发者,开发者具体用的什么权限或版本,咱们是没法控制的,只能经过指引说明的形式告诉他们如何配置。架构

因此咱们要考虑配置作到尽可能简便、友好、灵活。框架

升级

一个APP若是要升级,开发新版本上架到应用商场把它替换下来,或是推送更新通知,保证用户较快地用到新版本,同时在线版本范围比较小,老版本占有率慢慢下降。oop

而SDK不是直接上架市场,是须要开发者主动去拿文件,集成到本身的工程,再上架到市场。有些开发者几个月以后才作更新,甚至有的从不更新,这个状况致使同时存在不少个历史久远的老版本,这个问题会要求咱们作不少兼容性的考虑,因此可靠性和性能考虑的分量是比新功能要重的。

极光SDK的架构优化

旧架构

2016年以前极光推的主要是两个SDK,一个是Jpush,一个是JMessage。

旧架构的推送跟IM是两个独立的SDK,存在不少种冗余代码。缺点是占用空间大,有重复操做,占用了通道和线程资源,还有就是冗余代码的升级管理很是麻烦。

新架构

咱们在拓展业务后还新增了统计和分享,针对多条业务线的考虑,咱们作了架构调整,把业务跟核心作了分层。

JCore负责核心通用的功能,上层SDK各自在JCore之上运行自有业务,使结构更加清晰,利于拓展共享资源,减小重复动做,针对性作基础优化更加方便。


实际开发中须要考虑的

在和服务器通讯的时候,从协议的制定上要考虑兼容不一样的组件和同时在线的不一样版本。在代码设计上涉及到的策略类要采起策略模式,方便替换更优策略。

核心组件和上层的组件拆分红两个,针对升级不一样步的问题须要有更多的接口,要简洁,适应变化。

以及关于各个组件之间的通讯,经过命令模式,把动做抽象成为可传出的对象,实现分发和缓冲。

在Android开发的工程设计中,因为被拆分为两个包,一些接口不免会暴露出来,可是为了起到保护代码的做用,又不能彻底暴露。因此在方便和保护之间要作取舍权衡。

由于引入了不少组件,在打包、编译脚本的时候能够用到Jenkins+Gradle,编写脚本,作集成,能够自动打出多个包。

极光SDK的性能优化

多进程与多线程

多线程是语言的基本功,一般状况业务是在主线程执行,可是在移动端主线程任务太重会卡顿影响到用户体验,要尽可能克制。因此在占用资源比较多、耗时的状况下要另外多开一个线程。

在Android应用的设计理念上,进程是很是宝贵的资源,它尽可能不把进程管理交给开发者,而是让系统去处理。

若是是单进程的应用,作的任务不少,内存占用数高,派多个进程能够分担上面的一部分任务资源到另外一个进程,避免占用资源过高被回收。另一个好处是,在后台跑的主进程由于一些没法预测的缘由被系统回收掉了,在主进程的任务依然能够继续执行下去。

开了多进程之后内存空间是独立的,可能在主进程是初始化的,但在子进程上未被初始化。写代码的时候没有意识到,在运行的时候就出乎意料了。这就是数据不一样步会形成的问题。

数据不一样步是主进程和线进程都能遇到的问题,如何巧妙利用它的性能又不出错,我我的常常用双重检查锁,看上去代码更复杂,但有利于性能更好地运行,而且不容易出现数据不一样步的问题。

因为变量在多进程时是不一样步的,因此跨进程共享的变量,须要经过进程间通讯的机制,把变量的读和写均放到同一个进程中,虽然会带来一点性能损耗,可是这样才能保证数据正确性。

储存方式

同一个进程下,能够作一次读取屡次使用。

写的操做能够批量提交。

使用内存级别储存,响应更快。

跨进程的批量读取和提交。

拆分存储区。

长连接优化

咱们作极光推送,推送主要的任务都是在长连接里。客户端和服务器进行通信,先要进行接入服务。

咱们有一个SIS服务,就是另外开辟服务器去找当时的设备,它介入哪个IP,接入哪一个端口有更快的响应,咱们会下发一个列表给客户端,让它们本身去尝试。


要作性能优化,能够先把列表缓存在本地,若是失败了再用SIS下发的地址。而后写一些选择的策略,优先选择可用的,排除不可用的。

在接入服务这部分,会把当时的情况上报给服务器,让服务器根据这些上报的数据反馈作调整。

个人分享到此结束,谢谢你们!

活动预告

2017大数据与人工智能技术大会网易人工智能、网易云、IT大咖说、博学教育主办, 七牛云、Hadoop12三、才云、DBAPlus协办,成为广受瞩目的行业技术大会。大会将汇聚众多行业领军企业、专家大牛、知名媒体等,继续聚焦大数据人工智能的探索与应用,展现大数据与人工智能最新的技术创新与成就,为技术从业者、爱好者提供具备价值的交流平台,打造一场大数据与人工智能的技术盛宴。

线下地址:

杭州滨江区网商路599号网易大厦报告厅

直播地址:

扫码报名,或点击t.cn/R9mqzEF,看直播!


相关文章
相关标签/搜索