分别由CSDN&极客帮创始人——蒋涛、微软亚洲研究院院长——刘振、京东技术副总裁——赵一鸿、图灵机器人CEO——俞志晨、360智能家居总裁、360车联网CEO——邓邱伟演讲,有幸见到各大科技公司的领军人物甚是激动。下面大体讲解一下他们各自的议题,不做深入讨论,主要还是要讨论Android开发峰会。
未来十年产业将进入 AIR 时代,即人工智能、IoT、AR时代。A时代的标志是AlphaGo,深度学习已彻底改变了图像识别领域;I时代的标志是软银收购ARM,2015年人均芯片拥有量为2颗,十年后将达到人均100颗;R时代的标志是PokeMon Go,且VR头显的销售会逐年呈指数式增长。
介绍在大数据的时代,分析已经成为商业成功的一个关键推动点。深厚的数学知识是人工智能的基础,海量的数据是建立良好模型的关键,然而这些构建分析所必需的条件却是大多数开发者所缺乏的。基于机器学习的人工智能和基于语境的人机交互已变为可能,刘震也结合微软认知服务的实际案例,从计算机视觉API、人脸识别API、情绪识别API、语言理解智能服务等方面多方位角度进行解读。
详情请访问:微软亚洲工程院院长刘震:智能应用的普及化
移动端的普及提升了碎片化时间的利用率,在家电、母婴、体育、超市方面京东移动的渗透率已近80%。这一背景下,数据的价值体现在洞察、决策、挖掘、开放,利用大数据去设计买点成为了重点。用户画像如何从静态变为动态,实现变化,是大数据的基本特点。他以“智能卖场”的例子从应用层面展示了动态数据的价值,通过京东大脑对用户行为、商品属性等大数据的挖掘,产生用户及商品画像,完成推荐预测,实现个性化选品和排序,能够有效地提升点击率和订单转化率,同时缩短用户购买路径。演讲主要围绕以下三个方面探讨:移动互联网对电商企业的挑战,移动电商的发展潜力,以及移动时代电商大数据的价值。
详情请访问:京东集团技术副总裁赵一鸿:移动时代的大数据电商技术探索与实践
他把智能机器人定义为:外在硬件载体+人工智能系统和应用。他指出机器人操作层、感知层、认知层分别对应人的四肢、五官和大脑的概念。今天,智能机器人产业硬件所需要的投入要大于软件,只有产生优秀的硬件载体软件才能有意义,这涉及到各位传感器和控制单元,但这一天屏正在慢慢开始平衡。
他认为现在智能硬件行业整体呈高速增长状态,2015年达到300%,巨头从各个链条进入布局;而产品现状仍处于初期,缺乏联通,资本快速进入押宝智能家居;人工智能应用实用性大幅提升;在服务上,线上渠道仍为主要购买途径,而第三方服务尚却未大规模介入产业链。
详情请访问:360智能家居总裁、360车联网CEO邓邱伟:智能硬件设计及关键实现技术
以上就是全体大会的大体内容了。
本人对新鲜事物比较好奇,尤其是好玩的东西,听起来比较高大上的东西。比如人工智能、深度学习。由于上午各位大佬们的演讲太过于精彩,让我对人工智能提起来很大的兴趣,有一种想要立马研究一下的冲动。所以就决定先放弃预先安排的去跨平台专场,而去人工智能与机器人专场听听。因为之前没有接触过人工智能,所以听起来简直比上高数课还难受,根本不知道说的什么,因为比较感兴趣所以想继续试着听下去。听了很久之后觉悟到还是去跨平台吧,那时候离下午专场的结束还有不到一个小时的时间。真是蛮遗憾的。
附上跨平台技术专场的PPT及Demo,大家自行研究。
MDCC 2016跨平台开发专场的演讲 PPT 以及 Demo
时间 | 议题 |
---|---|
9:00 - 9:50 | 滴滴国际化 Android 端演进 吴更新 滴滴出行技术专家 |
9:50 - 10:40 | 回归初心,从容器化到组件化 冯森林 Android 独立开发者 |
10:40 - 11:30 | 云信 IM 推送保障及网络优化实践 周江华 网易云信 Android 端高级技术架构师 |
11:30 - 12:20 | 微信Tinker热补丁实践演进之路 张绍文 腾讯微信高级开发工程师 |
12:20 - 13:30 | 午休 |
13:30 - 14:20 | Fresco - loading images fast 王洁(Jie Wang)Facebook Fresco team 软件工程师 |
14:20 - 15:10 | 如何开发一款优雅的 SDK? 吕观祥 个推移动研发部研发主管 |
15:10 - 16:00 | 打造可信赖的 Android 设备 ID 杨玉奇 数盟首席架构师 |
16:00 - 16:50 | Android 中 Native 的内存泄露检测 德胜(季丹)阿里巴巴技术专家 |
16:50 - 17:40 | Android应用性能优化经验分享 张明云 步步高高级开发工程师 |
有必要重点说明的是这次Android会场的主持人是秋百万(廖祜秋)前辈。 他在主持的同时也讲解了不少东西,实在佩服秋百万前辈
滴滴主要服务的是国内用户去国外的情况。地图服务器是 不在AWS上面的。所以主要有海外运营商、用户依然使用国内版本的app在海外漫游的情况。主要讨论用户在海外漫游的情况。
国内用户在国外漫游访问国外服务器慢。
漫游网络,运营商,aws……
用户在国外访问网络的简单流程:
先访问海外运营商,通过海外运营商访问国内运营商,再去访问web。由于墙的存在一般用户是访问不到网络的。
为了解决这个问题使用了通过国内运营商去访问公网,通过公网访问AWS上的服务器。这种访问方式是比较慢的。
为了解决访问慢的缺陷,做了网络优化。在去访问AWS的时候在中间加一个中转服务器来实现专线访问
对于客户端来说,访问专线网络时大概会有三步:
1.拉取中转服务器域名列表
2.对于漫游用户访问中转服务器
3.一定时机及推送更新域名列表
这样做速度大概会比之前快一倍。
问题:Integrated Project怎么个打包法?Lyft、GradTaxi这些合并吗?还是它们会被打包成独立的apk?
回答:所有的module都是输出aar,最后一个整合成滴滴app
我讲解的可能是比较乱,同时可能也不怎么清晰,因为我自身理解的也是不怎么深刻。Piasy的视频连接:滴滴国际化 Android 端演进(包括冯老师分享的开头) 有时间可以自行观看。
近年来插件化,module化的原因,已经不再像过去那样,庞大的软件,改一行代码,测试,耗费开发人员较长时间(虽然我没有亲身体验过以前开发的难度,但是可想而知)。组件化作为独立模块,协同开发时,可以提供release版本进行集成。平时,只须在自己的dev分支上进行开发。大大提高开发效率。各模块之间解耦,当然这其中也面临相关的问题,如大量的反射方式。各rom厂商对系统的改动,就很容易产生各种问题。何俊林在会上请教了apk与apk数据之间如何共享的问题。冯老师建议可用contentprovider。建议在项目的早期做拆分,避免后期组件化的抽离困难。
以我现在的能力是很难听懂冯老师这个分享的,或者说我完全听不懂这个分享。是的,完全没有听懂。
还是分享一下别人的理解吧。
原文链接:MDCC 参会纪要
【大公司的方案,不一定符合小公司
模块化,从硬件,系统到软件
APP 的模块化
- 隔离各个模块
- 特性:独立,可替换,可互操作
- 代价:解耦,契约,兼容性
- 从第一天开始坚持解耦,为中长期打好基础
- 独立并行开发测试,高效,快速
- 灵活的集成,发布,升级
- 64k问题
- 选择性安装,非常轻量
- hybrid友好,web native 可切换
- 高度可扩展
- 包隔离,最简单,太宽松
- gradle library module 隔离,有很好的工具链,构建效率低
- 多 apk,构建、安装更高效,用户体验差
- multidex,工具链支持,弱
- 容器 droid plugin,hook 和代理,兼容性问题
- 半容器,直接合并,但需要类加载支持,轻量,兼容性好
- activity 作为入口,提前准备好,后续开发都是 fragment。
- activity 用 url 启动
- 禁止状态共享
……】这是Piasy大神的分享。
我自己的理解是把一个项目隔离出各个模块,使分离出的模块成为独立的、可替换的、维护性强的小项目。这样做的带来好处是解耦、兼容性、可维护性。从一开始项目就做好项目的分离工作,使其解耦,为以后打好基础。
现在IM应用范围很广泛,人与人要通过网络交流就离不开IM,可以说现在大多数的应用都有IM。
比如:社交、电商、教育、医疗等…
Instant:有新消息能立即收到,消息推送无延迟
Messaging:稳定可靠,安全,消息不丢,不乱,不重复
后台运行。答案就是后台运行。
需解决的问题:内存占用、进程优先级
方案:
1.Sticky Service、Alarm、Receiver、JobSchedule
2.建立多进程、双进程。避免使用单进程。
SDK架构的设计
云信IM SDK使用的连接类型有:TCP,UDP,HTTP。
TCP实现长连接,UDP实现一个需要加密处理的连接,HTTP实现收发文件等。
在复杂的Android生态环境下,多种因素都会造成消息推送不能及时达到客户端。另外,不稳定的移动网络也给数据传输的速率和可靠性增加了障碍。演讲从这两个方面出发,讲述了云信IM SDK如何实现不影响用户体验的后台保活,改善的长连接加推送组合方案,以及在弱网环境大数据传输的优化实践。
关于进程怎么在后台活,目前较好的解决方案包括:长连接+推送,系统推送(MIUI、华为为代表)。
而关于如何活好(主要问题是慢、断、贵),解决办法包括协议选择;
协议选择使用二进制的协议,牺牲了可读性换来的是包非常非常的小,同时拓展性也是比较好的。
登录加速(长连接中经常使用,步骤包括Lbs、Connect、Handshake、Login,Sync;优化思路为:尽量减少交互步骤,尽可能并行步骤);
使用TCP的连接方式。
通过减少交互的步骤,尽可能的使用并行步骤来实现登录的加速。连接和LBS并行、捂手和登录并行。
UDP优化(常用于音视频服务,对弱网环境更敏感,优化包括:FEC,自适应初始化包频,动态包频和码率调整,数据缓冲Buffer,音频PLC丢包补偿,Temporal Scalability视频编码,以及视频关键帧多重保障);
HTTP优化(断点续传,图片预加载,pipeline,边录边传)。
周江华老师讲的还是比较清晰,内容比较丰富的,基本涵盖了IM开发所要主要的问题。由于我自身能力的限制,理解的还是比较浅显的。附上Piasy的视频连接:【云信 IM 推送保障及网络优化实践上】【云信 IM 推送保障及网络优化实践下】
什么是热补丁:可以让应用无需重新安装下能够自动更新。
基于 classloader 的方案
preverify 问题,内存地址错乱,性能差,补丁包大
anr,dex 太大,分平台合成 dex,art 上合成小 dex
illegal access。
性能好,兼容性和稳定性差
主要在异常熔断、监控回调、安全、一致性、合成、加载方面进行优化。比较不容易理解,上图。
提升易用性和稳定性
核心问题:
1.多API获取不准确,反射出问题
2.32位与64位问题
尽量少的hook:
1.LoadLibraryFromTinker(“assets/86”,“stloprt_shared”);
2.LoadLibrary(“stlport_shared”);
预埋entry count:
1.编译强耦合
2.影响基础版本
3.无法随心所欲
全量替换
1.Atlas或者携程的插件化框架
2.Gradle-instant run
Transition动画:ResID无法新增、删除,可能出现Res not found
Notification:ResID无法新增、删除,可能出现Res not found
ShortcutResID无法新增、删除,可能会变成默认图标
Assets:读取 source apk方式无法修改
简单易用:
1.只要输入一个旧的基础包,即可生成补丁包
2.proguard
3.mainDex
4.日志与校验
灵活控制
1.可通过pattern灵活控制需要的内容
2.版本控制
减少补丁包
1.applyMapping
2.appyResourceMapping
3.force jumbo
4.7zip
微信开源计划:Tinker开源地址
同样附上Piasy视频网址:微信Tinker热补丁实践演进之路
YouTube上Jacks录制的网址:微信 Tinker 热补丁实践演进之路——张绍文
微信开发团队公号:微信开发团队公号 (详细介绍可点击链接,非常详细的介绍,基本是按照演讲的时候介绍思路进行的)
方案选择,最重要的依据还是我们的需求,回到初心。
性能优化实战
1. 超过80%的应用冷启动时间速度基本都控制在了1.5s以内
2. 解决图文混排控件界面因为图片太多导致滑动卡顿的问题
3. 对大部分模块完成静态代码分析,解决了明显的性能问题(Handler内部类、IO操作导致的内存泄露)
4. 解决两个APP因为适配不合理(图片存放的Drawable文件夹不对)导致耗内存的问题
5. 超过80%的应用基本做到无内存泄露(除系统导致的内存泄露问题外)
6. 解决了两个系统导致的内存泄露问题(WebView、InputMethodManager)
7. 超过80%的应用过度绘制层数控制在3X以内(无红色)
8. 超过95%的应用安装包大小控制在10M以内
转载请注明作者——王佳豪