今年因为疫情原因Google I/O 2020被迫取消了,但实际上Google官方仍然通过Youtube放出了原本为I/O准备的各种干货内容,从某种程度上说本届IO如期在Youtube上举办了。那么本届IO中有哪些值得关注的内容呢?
https://www.youtube.com/watch?v=bAdRKQNbLmQ&list=PLWz5rJ2EKKc9hqKx4qZWolQxy59Bt20t_
Android11目前处于Beta版本,提供了很多新的实用的API公开发者使用
Androi11中提供了新的WindowInsets
API,可以获取当前Insets中各种组成部分(例如状态栏、导航栏、软键盘等)的状态信息,例如可也判断IME的状态,这可是Android开发中的一个大痛点。
新的IME动画,允许软键盘跟随内容一起滑动, 不用再羡慕iOS顺畅的软键盘体验了
通知栏的消息可以以对话气泡的方式浮在所有应用上方,随意拖动,来消息时可以优先看到,点击进入窗口模式进行回复。
Autofill可以根据当前焦点位置,自动获取最佳建议出现在输入法选项中,例如选中Card number,IME选项中返回了可能的选项
你需要实现InputMethodService
方法,然后进行来自IME的请求
AndroidStudio 4.0稳定版刚刚发布,4.2 Canary 已经就位。
AS4.0中的MotionEditor可以可视化的编辑MotionLayout的动画效果
https://developer.android.com/studio/write/motion-editor
AS4.0中的带来到了新的 Layout Inspector,可以以3D的形式展现APP当前视图,而且增强了对于视图属性的支持
https://blog.csdn.net/vitaviva/article/details/106446670
AS4.1 Beta 中新增了 Database Inspector,可以实时可见地调试DB的数据,是时候跟各种第三方Sqlite插件说再见了。
https://developer.android.com/studio/preview/features#database-inspector
Jetpack这次带来Hilt以及App Startup两个新成员(目前均处于alpha版),同时一些既有库的功能得到扩展
Hilt可以大大简化Dagger2在Android上的使用,替代非常鸡肋的com.google.dagger:dagger-android
。通过@AndroidEntryPoint
可以快速地为Activity、Fragment等常用Android组件进行依赖注入,此外针对Jetpack的组件也有了个别支持,例如@ViewModelInject
的使用等
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
class SearchViewModel @ViewModelInject constructor(
private val repository: SearchRepository
): ViewModel() { … }
@AndroidEntryPoint
class SearchFragment : Fragment() {
val viewModel: SearchViewModel by viewModels()
}
https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d
我们为了让组件的全局初始化更加无侵,有时会定义Content Provider
进行初始化,例如Lifecycle库中的ProcessLifecycleOwnerInitializer等。
现在通过App Startup我们可以将各种组件初始化使用一个Content Provider代理而无需重复定义,同时还可以编排各组件初始化的顺序
// Initializes WorkManager.
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
class WorkManagerInitializer : Initializer<WorkManager> {
override fun create(context: Context): WorkManager {
val configuration = Configuration.Builder()
.setMinimumLoggingLevel(Log.DEBUG)
.build()
WorkManager.initialize(context, configuration)
return WorkManager.getInstance(context)
}
override fun dependencies() : List<Class<out Initializer<*>>> = emptyList()
}
https://developer.android.com/topic/libraries/app-startup
Paging3 基于协程对Paging进行了重新实现,同时增加了对于Header
、Footer
、LoadingStatus
等常见需求的支持。
通过继承PagingSource
并实现挂起函数load
来定义数据源,相较以前起来要简单得多
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
class MyPagingSource : PagingSource<Key, Value>() {
override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> {
try {
val result = api.requestPage(params.key)
return Page(
data = result.items,
nextKey = result.nextKey
)
} catch(error: IOException) {
return Error(error)
}
}
}
https://developer.android.com/topic/libraries/architecture/paging/v3-overview
Compose仍然处于PreAlpha版本,但是已经宣布将在夏天迎来Alpha版、明年迎来1.0。
本次更新带来了更强大的Preview功能,支持更多种类控件的预览, 同时相对于之前只能静态查看布局,最新的Preview允许进行简单的交互,甚至可以部署到一个壳工程中实际运行
https://www.youtube.com/watch?v=U5BwfqBpiWU