《2016中国移动开发者大会》参会笔记

Overall

总的来说,2016年的综合场(第一天上午)感觉讲的一般,身边的人吐槽也比较多。不过相比之下,iOS场干货就比较多了,演讲者基本都是圈内大V,包括喵神,Sunny等等。两天停下来有两个最大的感受,一是提到iOS大家很少提OC了,言必称Swift,看来Swift趋势势不可挡;另一个是RN演讲的比重很高,社区活跃度也很高,看来也是时候要跟进新技术了。 参加开发者大会一是开阔眼界,二是来朝朝圣,三是让自己清楚的意识到自己跟台上演讲嘉宾的差距在哪里,回去该怎么学还怎么学去。。。

VR的未来爆发

据估计,2020年会有20亿的移动VR设备,500万的VR Game

京东的移动布局

京东的移动电商大数据价值观:
  • 洞察: 数据包容丰富的趋势和变化
  • 挖掘 :分析和学习趋势,洞察变化原因
  • 决策 :将数据智能赋给客户与供应商
  • 开放 :分享对数据的洞察与商机给第三方
京东的移动应用覆盖率已经达到了80%
京东的大数据定价:

演讲中,京东显然是通过大数据来进行辅助定价,具体示意如下图:

大数据定价

其中GMV指的是Gross Merchandise Volume,GMV=销售额+取消订单金额+拒收订单金额+退货订单金额。GMV是流水,只要你下了订单,生成订单号,就算了GMV

消费者画像

京东给了这么一个公式:精准的用户画像+精准的算法=成倍提高的效益 所谓精准的用户画像,不是传统的给用户打静态Tag的行为,而是根据用户的购买行为建立起一个具体的,变化的,精准的画像。比如用户买了母婴用品,京东就有可能在半年之后给你推荐相应段数的婴儿奶粉,试图在最短的时间内让用户买到最合适的商品。

React Native

跨平台方案选型
  • Hybrid方案:Cordova性能和用户体验差
  • Code转换型方案:j2objc可移植性与可读性都很差
  • 编译型方案: Xamarin,C#解决方案,社区活跃度差,学习成本高
  • 混合型方案:React Native,社区活跃,RealTime Compiling
一种基于RN的程序架构方法:

一种基于RN的程序架构方法

在传统MVC之上,V层演化为React Native,这样就拥有了UI上的跨平台能力;C层为引擎,链接通过Configure来切换UI,以及通过RPC来切换Model以及对应能力;M完全靠SDK来做动态变化。

React Native 热部署平台:

一款微软出品的热更新平台:codePush

React Native JS导航栏目前的问题
  • 隐藏导航栏时有闪动,体现在Push和Pop的时候
  • iOS和安卓样式不统一
  • 动画卡顿,由于在动画过程中重新Render所致,通过延时或者InteractionManager解决
  • Native打开的RN页面中,通过Bridge返回Native
替代RN的Navigation的方案
Native APP + RN的优化方案

优化方案的架构

  • 所有功能放在一个Bundle中,使用统一导航;
  • 启动时创建一个RN Root,加载Bundle;
  • RN中按功能添加路由;
  • 点击功能时路由相应功能;
  • 返回Native时如果路由为空清空缓存释放内存;
  • 运行期间内存泄漏检测可能会误报,需要加白名单;
  • 功能越来越多时Bundle越来越大;
RN下的开发人员组成参考

开发人员组成参考

面向协议编程

产生原因:
  • 面向对象并不能很好的反应客观世界
  • Cross-Cutting Concern :(定义来自于Wikipedia) In aspect-oriented software development, cross-cutting concerns are aspects of a program that affect other concerns. These concerns often cannot be cleanly decomposed from the rest of the system in both the design and implementation, and can result in either scattering (code duplication), tangling (significant dependencies between systems), or both. (简单来说,Cross-Cutting Concern指的是一些由于设计和实现的问题导致的在功能分解时造成的代码冗余及函数依赖)

针对以上问题,传统解决方法分为:

  • Copy & Paste: 不推荐,初级程序员的做法;
  • BaseViewController: 不推荐,会将层级变的越来越多;
  • 依赖注入:一定程度上解决了这个问题,但是会增强了函数之间的耦合性;
  • 多继承:OC没有此特性,而且容易造成二义性问题;

因此推荐使用面向协议来编程。对于协议,需要注意的是:

  • 协议定义
  • 提供实现的入口
  • 遵循协议的类型需要对其进行实现
  • 协议扩展
  • 为入口提供默认实现
  • 根据入口提供额外实现

为什么优先考虑面向协议来编程: 高度协议化有助于解耦,测试以及扩展

IM通信协议分享

排名前三的Socket协议分别为
  • XMPP:协议开源,可扩展性强,有各种实现,接入方便;但是冗余多,耗费流量
  • MQTT:协议简单,流量少,订阅+发送模式。比较适合于推送,并不是太适合IM
  • WebSocket:Web原生支持,有很多第三方语言实现。可以适配XMPP,MQTT。
双向Ping Pong机制

Server通过向Client直接发数据以及通过APNS来向Client发数据,来保证数据的到达率

双向PingPong机制

APNS的优缺点
  • 优点:解决了iOS假在线等问题
  • 缺点:
  • 无法保证信息的及时性。
  • 无法保证信息的准确性。
  • 服务端压力太大。

因此APNS不适合需要及时响应的应用场景。

Protobuff为最优格式选择

不论是序列化,反序列化,字节大小来讲,protobuf表现最好

字节长度比较

移动端的性能调优
  • 优化重连机制
  • 精简心跳包
  • 减少心跳次数
  • 重连冷却(按照斐波切纳数列进行重连)在APP端进行重连

选择原因:

  • 省流量
  • 高效
  • 省电
  • 成熟可靠
  • 易于使用

搜狗输入法优化实践

键盘调起速度优化步骤
  • 懒加载,也就是依赖加载;
  • 尽量不阻塞主线程,不用解释;
  • 尽量避免额外操作,不用解释;
  • 慎用AutoLayout
  • autoLayout有简单,易用,可读性强的特点
  • updateConstraint的调用时机会影响程序的性能
  • 慎用NSDateFormatter,性能很差
  • 慎用 [NSStrnig sizeWithAttributes:]此方法性能很差,可以考虑通过估算每个字符宽度的方法来估算整体的String长度
所有应用组件都应该实现的方法(MemoryWarning)
  • 普通应用(UIApplicationDelegate) - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
  • 键盘应用(KeyboardViewController) -(void)didReceiveMemoryWarning
  • 所有应用都应该实现,以在内存告警的时候尽量释放无用的变量保证程序的顺利运行
内存优化建议
  • autorelease Pool要利用好
  • 避免循环引用
  • 读图方式要选择好
  • [UIImage imageNamed:@"xxx"] 图片会缓存
  • [UIImage imageWithContentOfFile:path] 图片不会缓存
  • 选择正确的缓存策略
  • 降低内存占用峰值(自己估计,尽量减少使用)
  • 内存文件的映射使用(解决大文件会刷爆内存的问题)
  • FastImageCache
  • Path
  • Mapped Memory
  • Uncompressed Image Data
  • Byte Alignment

测试

自动化测试推荐流程:
  • 打包:ShenZhen
  • 重签名:ota-tools/ipa-sign: unzip spa -> remove signature -> copy mobile provision -> code sign -> zip to new ipa 请保持环境为UTF-8
  • 安装
  • Instruments
  • 测试报告
自动化测试建议
  • 自动化用例脚本不用太多,保证主流程即可
  • 自动化用例也不用太长,防止链路过长而产生的问题
  • 避免用例互相依赖
  • 使用异步等待
  • 避免执行环境的差异
  • 提高用例编写水平
第三方内存泄露检测工具
  • FBRetainCycleDetector
  • FBAllocationTracker
  • FBMemoryProfiler

安全

  • Key不要直接存到客户端
  • 标识用户通过UIN来进行,相对安全
  • AFNetWorking要升级到3.0版本,不然HTTPS也不安全
  • AES中强烈建议使用AES_GCM
  • 密码如果一定要存的话,应当用Bcrypt/PBKDF2方式来进行存储

设计场

  • 一项真正的设计必须有一种感觉上的漂移,它必须能转换情感,唤醒记忆,让人尖叫,充满反叛。让我们感觉好像过着一种只属于自己的生活,它必须是充满诗意的。
  • 设计的ATF原则:
  • Art:艺术,美学
  • Tech:技术革新
  • Fun:充满乐趣

各种工具推荐

  • 各种有用的越狱工具
  • openSSH 是ssh的开源实现,一种保证远程登录到系统的协议
  • IPA Installer Console 通过命令行方式安装,卸载应用
  • Simulate Touch 模拟点击,滑动事件
  • Simulate Key Events 模拟发送物理按键事件的插件
  • iOS下Crash日志的收集
  • Crash Reporter
  • ITC
  • Bugly
  • Crashlytics
  • 友盟等
  • iOS下崩溃日志解析
  • symboliticrash
  • xcrun atos
  • dwarfdump
  • CLI工具:shenzhen shenzhen
  • iOS 自动化测试工具:ui-auto-monkey iOS上的uitest工具
  • 自动化测试平台: appium

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

嵌入式系统开发过程中的常见问题和解决方法

1. Bootloader如何写入Flash ? 初学者一般都会遇到如何将程序写入处理器的问题。对于不同的处理器,可以采用不同的方法。例如Intel的Xscal...

3597
来自专栏ytkah

快速返回朋友圈顶部 快速查看未读消息【微信5.4贴心升级】

  IOS版微信5.4发布了,安卓系统碎片化相对比较严重,相信这段时间就会泄出。新版微信增强了搜索、面对面转账等功能,首次适配ipad,还做出了一些贴心的升级,...

3195
来自专栏FreeBuf

怎么用Python爬虫煎蛋妹纸海量图片?

我们的目标是用爬虫来干一件略污事情。 最近听说煎蛋上有好多可爱的妹子,而且爬虫从妹子图抓起练手最好,毕竟动力大嘛。而且现在网络上的妹子很黄很暴力,一下接受太多容...

2818
来自专栏FreeBuf

一张GIF引发的微信崩溃

今早,朋友发了一个表情给我,看下面,就是这个。。 ? 这不是天线宝宝卖萌系列表情包么,正当我看着俩宝宝撞屁股的GIF图寻开心的时候,微信突然卡死闪退了。。然后我...

3409
来自专栏JavaQ

编写高质量代码开篇

最近因为加入一个新的团队,才开始认真的关注关于编写高质量代码的话题,学习总结的同时,记录下这段让自己再一次认真学习的过程。 想成为架...

3225
来自专栏牛客网

BAT面经

因为也许我当时因为要实现梦想只有一条途径,可如果你选择了一条路,这并不意味着你要放弃其他的方式。——《跳出我天地》

1783
来自专栏帘卷西风的专栏

开源CEGUI编辑器之二(MFC重写的ImagesetEditor)

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

1021
来自专栏微信终端开发团队的专栏

关于Android N的那些事

今年3月,Google破天荒提前半年发布了Android N开发者预览版。当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门...

2996
来自专栏Java学习网

Android自动化测试解决方案

Android自动化测试解决方案 桌面应用程序与浏览器端的自动化测试都已经历了十年的发展,无论是从工具上还是项目管理方 法论上都已经趋于成熟。而移动设备端应...

25110
来自专栏牛客网

成都-阿里Java研发工程师面经

11号去成都参加阿里面试,网上预约的3点,两点半就到了,刚签完到马上就喊去面试。经历了一面二面和HR面。 一面 1.介绍一下你的项目,说一下哪个项目印象最深 ...

4358

扫码关注云+社区

领取腾讯云代金券