作者介绍:陈志兴,Google I/O 2017大会的小时光茶社特派员 ,腾讯SNG增值产品部内容中心Android组leader,主要负责手Q个性化业务、手Q WebView等项目。喜欢阅读优秀的开源项目,听听音乐,偶尔也会打打竞技类游戏。
今天是Google I/O 2017开发者大会的第二天,山景城的天空一如既往地湛蓝,气温也非常舒适。经过一宿的休息,早上精力非常充沛,7:30分坐上同事丁教授的豪车飞奔会场,时刻准备着继续享受Google为大家准备的技术大餐。
今天的主题会议是从早上8:30开始,到晚上18:30结束。主题分享结束后,迎接开发者们的是一个狂欢音乐晚会(来自程序员的呐喊)。
为了不错过更多精彩的内容分享给大家,我这边时间安排得比较紧,听满了整整10场,午饭都是秒杀解决,哈哈。好了,下面继续给大家整理今天的精彩内容。
今天听的第一个主题是Android架构组件相关的,主要分享如何解决Android组件和UI之间的生命周期问题。
Android组件和UI的生命周期管理比较复杂,比如子类需要重载各种方法(onCreate、onStart...)来处理生命周期逻辑,导致大部分代码都集中在Activity里面,造成文件代码行数庞大,维护成本高。
现在Google针对这个问题提出了一种新的解决方案:引入LifeCycleOwner、LiveData和ViewModel概念。LifeCycleOwner负责管理生命周期,LiveData负责设置数据,ViewModel负责管理当前界面的LiveData。LifeCycleOwner通知LifeCycleObserver驱动LiveData更新数据。这样设计框架的好处是按模块细分,各个模块之间耦合低,能够更好地维护代码。
09:30-10:30 TensorFlow Frontiers
第二个参加的主题是与AI相关的,主要分享TensorFlow的最新进展及性能强大的Cloud TPUs的。
简单介绍了一下深度学习的原理后,Google开始分享TensorFlow目前的状况。从Google分享的数据来看,TensorFlow在短短的1年时间内,超越其他的机器学习项目,已经成为行业的领头羊。
Google旗下的搜索、邮件、翻译、地图等产品都接入了TensorFlow,通过深度学习给用户提供更好的体验。
另外Google开发了第二代TPU,这款TPU专门为机器学习训练和推理设计,性能上极大提升。另外,Google即将为开发提供Cloud TPUs运算能力支持,而且接口封装非常友好,使用Cloud TPUs仅需要增加几行代码,使用起来跟本地运算差不多。
Google为了让更多开发者参与到TensorFlow来,专门提供了1000个TPUs来加速深度学习的研究,大家赶紧搞起。
最后Google提出了一个AutoML的概念,让模型通过深度学习来自动建立新的模型。看来,天网系统要被Google启动了。
今天参加的第三个主题是如何快速有效地进行TensorFlow开发,其实是个TensorFlow入门教程。参加这个主题的人非常多,全民AI的时代终于到来了。
这个主题首先介绍了一下深度学习的流程,然后通过代码一步一步教你如何入门TensorFlow。Google为了降低深度学习开发的门槛,提供了一个高级API的库Keras,开发者可以很简单地调用API进行模型训练、预测等。
接着,Google通过一个简单的例子,教大家如何从实际场景上使用TensorFlow,如上图如何通过TensorFlow回答出这个男人在干嘛,他的衣服是什么颜色的?
这个主题主要从开发、编译、测试及优化四大方面分享Android开发者工具的新特性。
在开发方面,除了昨天提到一键转Kotlin代码、XML设置字体等特性外,还支持查看ByteCode代码,UI智能布局等功能,非常实用。
在编译方面,Android Studio3.0上面将支持Dex的增量编译等功能,编译速度将会得到提升5倍。
另外,Android Studion3.0除了对CPU、内存、网络分析工具加强后,还支持了对APK的分析功能,对分析方法数等场景非常有用。
这个时间段没有太感兴趣的主题,后来看到有个C++相关主题,而且演讲者还是个ACM SIGPLAN的前主席,想起了大学年代疯狂刷ACM题目的日子,感觉比较亲切就过去了。
演讲者看起来非常和蔼,跟而且PPT也有点像大学老师的风格,有种回到大学上课的感觉。整个分享围绕着如何在Java对象被释放后,持有的C++指针的对象怎么释放。
在Android里面,通常的做法是在Java对象被GC回收,触发finalizer之后进行Native对象的释放。但老师指出了finalizer这种方式在某些场景下存在风险,比如finalizer执行顺序随机可能会导致Native释放引发堆异常等。
最后提出了加入一个中间层PhantomReference队列,管理Java对象和Native对象的关系。在触发GC等场景下,统一释放Native变量。后面还提了一些C++关于智能指针的管理。
13:30-14:30 Open Source TensorFlow Models
这个是今天参加的第三个TensorFlow的主题,主要分享Google在图像方面的开源模型ImageNet和语言方面的开源模式SytaxNet。
ImageNet方面主要介绍了机器学习中图片的合成,也就是之前的DeepDream项目。DeepDream经过长期的训练之后,能够合成很多人类无法做到的艺术图片。
SytaxNet方面主要是关于语法分析,通过机器学习后,语法识别的准确度非常高,目前SytaxNet支持多种语言,包括中文。
这个主题中涉及到了很多论文,大家有兴趣的话可以深入研究一下。
这个主题主要介绍Android Instant App是什么及一些开发规范,内容比较简单。
上面这个图的文字“Apps that are there when you need them and gone when you don’t”,与微信小程序的产品思路非常相似,确实Android Instant App就是Android的小程序。
Android instant app可以理解为完整App的一个功能模块,这个模块可以独立运行,当用户使用的时候,可以仅下载instant App,达到快速打开的目的。目前可以通过Android Studion3.0来快速创建。
从这两天的分享来看,Google在Web上布局了AMP和PWA,在Native上布局了Instant App,基本覆盖了所有场景,非常强大。
这个主题主要分享了Android Things上面如何使用Google Service,特别是Android Things和TensorFlow的组合,意味着智能硬件的时代也不远了。
演讲者首先分享了Android Things的三层架构(硬件、系统和服务)及如何通过代码在Android Things上面使用Google的服务。
接着演示了Android Things加上TensorFlow的一个Demo:摄像机拍摄一张相片传到安装有Android Things的芯片,经过TensorFlow后,能够识别图片里面的动物是什么。
最后演讲者给出了一些扩展的场景,比如排队的时候,摄像头加TensorFlow可以计算排队人数等。
TensorFlow无处不在,与Android Things的完美配合,让未来的智能硬件时代充满无限想象。
这部分主要介绍Android O上面启动图标、快捷方式、通知三大部分的新特性。
启动图标方面,主要增加了一个foregroud图片,来解决不同启动图片形状下(系统设置栏可以设置系统图标为圆形或方形等)icon变丑的问题。
快捷方式方面通过广播发送INSTAL_SHORCUT的方式不再生效,需要通过新的API来调用。
通知这块改动较大,新增了通知类型,分别为Major Ongoing、People to People、By the Way,优先级分别是高、中、低。低优先级的通知在锁屏场景下不通知,而且会在通知列表里面以...形式存在。
另外通知这块增加了notification channels对通知进行分类,用户可以选择屏蔽某类或者全部屏蔽。
这个主题主要介绍V8引擎现在的框架和未来的优化方向。
在过去的1年内,V8引擎一直在优化流水线,目前的Turbofan+Ignition Interperter组合很好地解决了内存占用和执行性能的问题,整体速度上提升了20-35%。
同时Chrome上支持了对Node.js的调试,同一行代码上有多个调用,也可以区分打断点。对Node.js的开发者来说,是个非常不错的消息。
另外Chrome调试工具上面还支持了代码覆盖率检测,可以快速发现页面上引入但是没有被调用的代码,从而让开发者减少代码量,提高JS的执行性能。
最后,Web汇编又上场了,这个是目前V8引擎正在优化的一个主要方向。非常期待WebAssembly的普及,让JS的执行速度再上一层楼。
今天的主题分享到此全部结束,最深刻的还是TensorFlow。TensorFlow给了我们更多的想象空间,结合Android Things,我们可以让身边的硬件瞬间“活了”。全民AI的时代已经到来,未来充满无限想象。
明天,还有更多关于Cloud、VR和Android的精彩内容,切勿错过~
最后,开发者们的狂欢音乐派对开始了!!!