Google I/O 2019, 这里有个playlist是所有Android开发相关的session视频合集:
Android & Play at Google I/O 2019
当然啦每个视频都看不太现实了, 就挑几个看看吧.
这里是我个人的一点笔记, 可以作为一个太长不看版, 感兴趣的点再自己了解下.

CameraX

  • 更易用的API.
  • 隐藏底层细节.
  • 兼容各种设备.
  • 自动化测试套件.

Android Studio UI design tools and Debugging Tools

Design Toolchain:

Layout Editor

  • Blueprint mode.
  • context menu来提供一些更方便的工作. constraint popup. constraint menu.
  • 预览改进: RecyclerView的预览改进. 预览sample数据.
  • attribute界面可以指定dimen中定义的自定义尺寸.

相关文章:
https://medium.com/androiddevelopers/android-studio-project-marble-layout-editor-608b6704957a

Navigation Editor

  • navigation components的使用.
  • navigation editor中的预览.

Resource Manager:

  • Batch Import, 可以直接把图片资源拖拽整理进去. * 可以把svg拽进去变成vector drawable.
  • 提供了layout, color等的小图预览.
  • 颜色的alpha终于可以用百分比设置了.

Layout Inspector:

  • 改进了属性显示.
  • 可以直接预览修改.
  • 3D显示, 可以查找某个背景颜色到底是哪一层设置的.

(我的思考: 现在Android Studio越来越鼓励开发者直接利用图形界面来设置layout了, 总是喜欢直接编辑xml算不算是早期Android遗老遗少的一个陋习?)

What's New in Architecture Components

Kotlin first.

Data binding:

  • Faster complilation:
    android.databinding.incremental = true.
    增量注解处理.
  • 错误信息改善了. (耶!)

How to access views?

  • 几种find view的方法比较.
  • View Binding: coming soon in Android Studio 3.6.

Lifecycle

  • ViewModel和Saved State.
    SavedStateHandle: 传入ViewModel, 用于保存一些在应用被杀死后重启仍然需要恢复的值.
  • 一些代码的写法被优化了.

WorkManager

优点: deferrable, persistent, constraint-based, backwards compatible.

  • 性能: on-demand initialization.
  • Google Play Services integration.
  • 兼容性.
  • 测试.
  • Future: foreground service.

Room

  • Coroutines, 协程支持: suspend方法.
  • Full text search: @Fts4, MATCH.
  • Database Views. @DatabaseView. 重新组织一个可查询的数据结构, 类似于重新组装一个表, 用来查询.
  • 扩展了Rx支持: 数据库操作方法可以返回Single, Completable等Rx类型.
  • Future: 注解处理; 关系改善; migration改善; 协程Channel&Flow.

Paging

What's next in Paging?

  • Built in network support with error handling.
  • Headers & footers
  • 更好的Rx和协程集成.

Navigation

  • ViewModels scoped to Navigation Graphs.
  • Navigate by URI.
  • Dialog as destinations.
  • Safe Args.
  • Future: Better support for dynamic features.

最后广告了一下这个课程:
https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012

What's New in Android

What's new in Android Q:

System UI

  • SAW: System Alert Window. -> 安全问题. -> 引入Bubbles (API 29).
  • Dark theme.
  • Share sheet: 内容预览, 粘贴, 性能改善.
  • 通知分区域: Priority, Gentle.
  • Notification actions: 自动生成回复.
  • 手势导航.

Platform

  • WebView: Trichrome: Separate WebView/Chrome, hung renderer检测.
  • Accessibility.

Text

  • API 23默认开启了连字符, 性能下降, 所以在Q默认关闭了.
  • API for fonts.
    还单独有个text的演讲专门讲这个.

Magnifier

private APIs

要么用public的, 要么private改成public的, 要么加新的.
gray list中加了更多的(以后的版本将不能用了).

Android Runtime (ART)

Profile, 启动改善, GC改善.

Kotlin

Q的新API有nullability注解.

Security

TLS 1.3 默认开启.
生物识别改进.

Jetpack Compose

全新的UI组件: Kotlin, Reactive.
(很像Flutter.)

Privacy

  • 外部存储限制.
  • Location: 权限设置更新. 新增只有前台时允许的选项.
  • 后台启动Activity限制.

其他

  • CameraX
  • Architecture Components
  • ViewPager2
  • ViewBindings
  • Blend Modes
  • RenderNode
  • HardwareRenderer: 可以控制光源(阴影)
  • Hardware Bitmaps
  • Audio Playback Capture
  • 应用不能控制wifi开关
  • Settings Panel

Build a Modular Android App Architecture

为什么我们要模块化呢?

  • scale: 更易分组开发人员; 更易查找资源.
  • 更快的编译速度.
  • 更快的CI. 只执行有修改的module相关的测试.
  • Good for business. App Bundles: 更小的apk.
  • 分离的feature测试. 快速AB Test一个新功能.

两种Modules:

  • Library Module
  • Dynamic Feature Module

如何分离模块呢?

  • by feature
  • by layer
  • feature & layer.

模块间的依赖

Module A依赖Module B:

  • api: Module B is part of my Public API. 依赖A的可以看到B.
  • implementation: Module B is my Implementation Detail. 依赖A的看不到B.

这里讨论了一个分层模块化构架中的问题: repo模块对数据库模块的依赖, 用api, 上层可以直接使用数据库模块中的实例类, 但是同时暴露了DAO, 破坏了模块化分离的意义.
两个选择:

  • 规定在上层不要操作数据库.
  • 新建一个通用的数据模块, 存放实体类, 数据库模块implementation依赖它, repo模块api依赖它.

测试.

Dynamic feature modules

几个挑战:

  • 导航. 需要hardcode类名.
  • 找依赖. Dynamically loaded modules.

代码例子: android-dynamic-code-loading
结合dagger.

数据库

数据库的几种选择:

  • 一个数据库: 好维护, 好共享, 但是没有分离.
  • 一个核心数据库 + 每个feature自己的数据库: 有了分离, 但是共享成了问题. 如果hybrid: 让有交互的模块共享, 也是挺复杂的.
  • 一个Room的bright feature: Multi-module数据库. (Not Available now.)

最后闲聊了几句关于构架的讨论.
Android team只是提供options, 最后的选择还是depends.

  • 考虑: short time costs, long time benefits.
  • 用户不会因为app的构架好而给你5星.

What's New in the Android OS User Interface

三个方面:

  • Sharing: 性能改进; UI改进; 更多自定义选项.
  • Notifications: gentle; actions.
  • Multitasking: Bubbles.

Improving App Performance with Benchmarking

Jetpack Benchmark Library:
https://developer.android.com/studio/profile/benchmark.md

  • 可以测量工作方法的时间: 重复测量的Rule;
    合理排除初始化时间.
  • UI测试.
  • 新增module: Benchmark Module.

工具实现细节介绍.

Best Practices:

  • Start with tracing.
  • Synchronous blocks.
  • Small blocks
  • Hot code.
  • Caches.
  • @RunWith(Parameterized)
  • 不要比较设备.

例子: googlesamples/android-performance

最后, 欢迎关注微信公众号: 圣骑士Wind

Google IO 2019 Android 太长不看版的更多相关文章

  1. Google IO & 2019

    Google IO & 2019 Google IO Recap \ https://www.techradar.com/news/google-io-2019-keynote https:/ ...

  2. Android Weekly Notes Issue #310 (Google IO特别篇)

    Android Weekly Issue #310 May 20th, 2018 Android Weekly Issue #290 本期既有本次Google IO对于Play Console的更新简 ...

  3. Android 网络通信框架Volley简介(Google IO 2013)

    1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...

  4. [转]Android 网络通信框架Volley简介(Google IO 2013)

    Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...

  5. 【转】Android 网络通信框架Volley简介(Google IO 2013)

    Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...

  6. [转]Android TCP长连接 心跳机制及实现

    背景知识 智能手机上的长连接心跳和在Internet上的长连接心跳有什么不同 Android系统的推送和iOS的推送有什么区别 几种推送的实现方式 协议 1XMPP简介 2 MQTT简介 3移动端消息 ...

  7. Google主推-Android开发利器——Android Studio,这可能是最全的AS教程!

    Android Studio使用手册 "工欲善其事必先利其器" 作为一个Android开发人员来说,一款好的开发工具也是相当重要的,在相当长的时间礼,Google都是基于Eclip ...

  8. 回顾Google IO 2016 -Keynote【图解】

    Google IO大会倒计时进行中~~ 两名演奏者在使用高空“古筝”. 最后5秒倒计时~~~~全场轰动~ 倒计时结束,IO大会正式开始.屏幕中,一个人把纯白的唱片放入唱片机中. 然后欢快的音乐响起,台 ...

  9. 总结解决 Android-Studio 编译耗时(好久、太长)问题

    首先通过搜索有关Android-Studio 编译耗时(好久.太长)问题的博客,速度确实有所改善. 一.暂时解决 Android-Studio 编译耗时(好久.太长)问题 本文链接:https://b ...

随机推荐

  1. ajax跨域解决办法

    在使用jquery的ajax作请求时,http://127.0.0.1:8080,类似这样的一个本地请求,会产生跨域问题, 解决办法一: jsonp: var url= "http://12 ...

  2. vim学习记录(转)

    基本功 Vim有三种模式: 导航(navigation)模式. 这时候,字母就是上下左右键. 输入模式.这时候,你按字母键,才会输入字母. 命令模式.需要先输入":" 冒号,才会进 ...

  3. 2016.7.14 generator基于注解和基于xml自动生成代码的区别

    1.generator配置文件generatorConfig.xml的区别 2.生成代码的区别 注:二者的实体类都一样. (1)基于XML 生成的文件有: 后面省略. 也就是说,基于xml的方式,是要 ...

  4. Python setup.py和MANIFEST.in文件

    Setup.py文件 from setuptools import setup from codecs import open # 第三方依赖包及版本号 requires = ['beautifuls ...

  5. mysql rpm安装,以及修改charset

    http://my.oschina.net/u/1156660/blog/343154?fromerr=tmDGGiDL 修改charset: http://stackoverflow.com/que ...

  6. 5.2 calendar--通用日期的相关函数(3)

    prmonth(theyear, themonth, w=0, l=0) 打印指定年和月的日历.格式与formatmonth()函数一样. 样例: #python 3.4 import calenda ...

  7. Siteserver平台搭建

    本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 一开始什么也不懂真痛 ...

  8. python coding style guide 的高速落地实践

    python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...

  9. Java多线程面试问题

    这篇文章主要是对多线程的面试问题进行总结的,罗列了40个多线程的问题. 1. 多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓 ...

  10. 初识vue-01

    一.属性和方法 vue自定义的一些数据和方法需要绑定到实例的不同属性上面去例如数据都要绑定要data属性,方法都要绑定到methods方法实例上的data和methods里面的key值会自动挂载到vu ...