I/O 前沿 | Android 更新一览(Day1)

又到了一年一度的 I/O 大会,今年仍然是线上直播的形式,Day1:主要是一些主题演讲、产品发布,还有 Codelab。Day2:则是一些技术领域的 Session。

以下内容是我看完 Day1 内容后,梳理出的 Android 开发者相关的信息,主要包括:Android 13 更新、Android Studio 更新、Jetpack 更新。

一、Android 13 的重要变更

Android 13 有许多令人振奋的新特性,这里我只列了跟 Android 开发者相关的变更。

隔离 WiFi 与地理位置权限

在 Android13 之前,我们为了获取用户在室内的精确位置,地图 SDK 往往需要获取 WiFi 相关的权限。这一行为对于开发者而言是能理解的,但用户却会觉得十分可疑。

因此,Android 13 引入了一个新的权限:

NEARBY_WIFI_DEVICES

详细的介绍大家可以看这个文档。

作者备注:这真的很贴心!其实,Android12 也有类似的行为变更,Android 12 隔离了蓝牙与地理位置权限。用户不必为了地理位置权限而开放蓝牙权限了。

省电神器:前台服务管理器

在 Android 13 当中,用户可以通过前台服务管理器(Foreground Services (FGS) Task Manager),管理当前系统运行的所有前台服务。

I/O 前沿 | Android 更新一览(Day1)_第1张图片

作者备注:从前,对于没有通知权限的应用,它的前台服务可能无法展示在通知栏,用户自然也就无法注意到。这一点在 Android 13 不再是问题。

更细颗粒度的存储权限

对于存储权限,想必大家都对 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 十分熟悉。但是,在 Android 13 当中,对读取权限被划分成了更加细的颗粒度。

文件类型 对应权限
图片 READ_MEDIA_IMAGES
视频 READ_MEDIA_VIDEO
音频 READ_MEDIA_AUDIO

    
    
    
    

    
    
    
        ...
    


另外,Android 13 还提供了类似 iOS 的“系统级别的”图片选择器。如果你只需要访问图片与视频,Photo Picker 将会是一个不错的选择。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-loiKBGy5-1652363714314)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9551f0d6aca84c49ba4ce80f0c407aa6~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]

其他变更

以下是一些对开发者不那么重要的变更,大家感兴趣的可以点击链接看详细内容。

  • 阻止不匹配的 Intent-filter

  • 电量管理变更

  • 音乐播放体验优化

二、Android Studio 更新

全新的Android Studio 版本:海豚、鳗鱼。

I/O 前沿 | Android 更新一览(Day1)_第2张图片

其中,海豚版本,已经进入 Beta 渠道了,而鳗鱼版本则是 Canary build,两者都提供了许多实用的特性,尤其是:对 Compose 的支持

I/O 前沿 | Android 更新一览(Day1)_第3张图片

三、Jetpack 重要变更

首先,Jetpack 在 Android 生态当中的使用率进一步提升了,可以说 Jetpack 越来越受欢迎,地位也越来越重要了。

I/O 前沿 | Android 更新一览(Day1)_第4张图片

性能优化: JankStats

今年的 I/O 大会,Jetpack 格外关注性能优化,它同时推出了两个新的库:JankStats、Baseline Profiles,而且,也更新了去年新推出的 Macrobenchmark。

JankStats,顾名思义,就是为了监测掉帧、卡顿的。

I/O 前沿 | Android 更新一览(Day1)_第5张图片

大致用法如下:

class JankLoggingActivity : AppCompatActivity() {

    private lateinit var jankStats: JankStats

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...
        // metrics state holder can be retrieved regardless of JankStats initialization
        val metricsStateHolder = PerformanceMetricsState.getForHierarchy(binding.root)

        // initialize JankStats for current window
        jankStats = JankStats.createAndTrack(
            window,
            Dispatchers.Default.asExecutor(),
            jankFrameListener,
        )

        // add activity name as state
        metricsStateHolder.state?.addState("Activity", javaClass.simpleName)
        // ...
    }

    override fun onResume() {
        super.onResume()
        jankStats.isTrackingEnabled = true
    }

    override fun onPause() {
        super.onPause()
        jankStats.isTrackingEnabled = false
    }
}


性能优化黑科技:Baseline Profiles

[Baseline Profiles是一个被编译进 APK 当中的文件,具体路径在:assets/dexopt/baseline.prof。我们开发者可以将一些高优先级的方法打进去,方便 Android 虚拟机去做特定的优化。

当应用首次安装的时候,ART 虚拟机可以根据 baseline.prof 当中的方法,进行 AOT 编译优化,这样就可以让我们这些特殊关心的方法运行的更快。

I/O 前沿 | Android 更新一览(Day1)_第6张图片

通过 Baseline,我们开发者从某种程度可以跟 ART 虚拟机交流,去决定哪些方法可以进行 AOT 编译。可以想象,这一技术运用到冷启动优化当中是会带来不菲收益的。

以下是它的兼容性描述。

I/O 前沿 | Android 更新一览(Day1)_第7张图片

四、Jetpack Compose 更新

今年的 Jetpack Compose 更新,其实分为两个部分,一个是工具支持,也就是前面提到过的 Android Studio 更新,为我们开发者带来更好的开发体验。另外一个部分,则是API 层面的更新。

Lazy Layout

首先 Compose 在 1.2 版本中进一步优化了它的Lazy Layou的性能,包括 LazyColumn、LazyRow、LazyVerticalGrid(实验性)。

I/O 前沿 | Android 更新一览(Day1)_第8张图片

嵌套滑动

另外,则是进一步完善了 Compose 当中的嵌套滑动。

实现 Compose 的嵌套滑动,在大部分情况下,是可以自动实现的。比如说这个例子:

val gradient = Brush.verticalGradient(0f to Color.Gray, 1000f to Color.White)
Box(
    modifier = Modifier
        .background(Color.LightGray)
        .verticalScroll(rememberScrollState())
        .padding(32.dp)
) {
    Column {
        repeat(6) {
            Box(
                modifier = Modifier
                    .height(128.dp)
                    .verticalScroll(rememberScrollState())
            ) {
                Text(
                    "Scroll here",
                    modifier = Modifier
                        .border(12.dp, Color.DarkGray)
                        .background(brush = gradient)
                        .padding(24.dp)
                        .height(150.dp)
                )
            }
        }
    }
}

你可能感兴趣的:(Android,android,android,studio,android-studio)