透过GoogleI/O看Android11以及Jetpack的最新进展

在这里插入图片描述
今年因为疫情原因Google I/O 2020被迫取消了,但实际上Google官方仍然通过Youtube放出了原本为I/O准备的各种干货内容,从某种程度上说本届IO如期在Youtube上举办了。那么本届IO中有哪些值得关注的内容呢?

https://www.youtube.com/watch?v=bAdRKQNbLmQ&list=PLWz5rJ2EKKc9hqKx4qZWolQxy59Bt20t_


# Android11

在这里插入图片描述
Android11目前处于Beta版本,提供了很多新的实用的API公开发者使用

## WindowInstes

Androi11中提供了新的WindowInsetsAPI,可以获取当前Insets中各种组成部分(例如状态栏、导航栏、软键盘等)的状态信息,例如可也判断IME的状态,这可是Android开发中的一个大痛点。
在这里插入图片描述

## IME Animations

新的IME动画,允许软键盘跟随内容一起滑动, 不用再羡慕iOS顺畅的软键盘体验了

## Bubble

通知栏的消息可以以对话气泡的方式浮在所有应用上方,随意拖动,来消息时可以优先看到,点击进入窗口模式进行回复。
在这里插入图片描述

## Autofill

Autofill可以根据当前焦点位置,自动获取最佳建议出现在输入法选项中,例如选中Card number,IME选项中返回了可能的选项

你需要实现InputMethodService方法,然后进行来自IME的请求
在这里插入图片描述


# AndroidStudio

在这里插入图片描述
AndroidStudio 4.0稳定版刚刚发布,4.2 Canary 已经就位。

## MotionEditor

AS4.0中的MotionEditor可以可视化的编辑MotionLayout的动画效果

https://developer.android.com/studio/write/motion-editor


## Layout Inspector

AS4.0中的带来到了新的 Layout Inspector,可以以3D的形式展现APP当前视图,而且增强了对于视图属性的支持

https://blog.csdn.net/vitaviva/article/details/106446670


## Database Inspector

AS4.1 Beta 中新增了 Database Inspector,可以实时可见地调试DB的数据,是时候跟各种第三方Sqlite插件说再见了。

https://developer.android.com/studio/preview/features#database-inspector


# Jetpack

在这里插入图片描述
Jetpack这次带来Hilt以及App Startup两个新成员(目前均处于alpha版),同时一些既有库的功能得到扩展

## Hilt

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

## App Startup

我们为了让组件的全局初始化更加无侵,有时会定义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

Paging3 基于协程对Paging进行了重新实现,同时增加了对于HeaderFooterLoadingStatus等常见需求的支持。

通过继承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

Compose仍然处于PreAlpha版本,但是已经宣布将在夏天迎来Alpha版、明年迎来1.0。

本次更新带来了更强大的Preview功能,支持更多种类控件的预览, 同时相对于之前只能静态查看布局,最新的Preview允许进行简单的交互,甚至可以部署到一个壳工程中实际运行

https://www.youtube.com/watch?v=U5BwfqBpiWU

猜你喜欢

转载自blog.csdn.net/vitaviva/article/details/106743913