0
点赞
收藏
分享

微信扫一扫

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)_Kotlin

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

更细颗粒度的存储权限

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

文件类型

对应权限

图片

READ_MEDIA_IMAGES

视频

READ_MEDIA_VIDEO

音频

READ_MEDIA_AUDIO

<manifest ...>
<!-- 只在 Android 13 使用. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"

<!-- 兼容Android 13 之前的系统. -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
<application ...>
...
</application>
</manifest>

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

其他变更

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

  • ​​阻止不匹配的 Intent-filter​​
  • ​​电量管理变更​​
  • ​​音乐播放体验优化​​

二、Android Studio 更新

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

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

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

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

三、Jetpack 重要变更

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

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

性能优化: JankStats

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

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

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

大致用法如下:

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)_android_06

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

以下是它的兼容性描述。

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

作者备注:另外,Baseline 可以跟 Macrobenchmark 搭配使用,更多内容请阅读​​Macrobenchmark 官方文档​​​、​​Baseline Profiles 的官方文档​​。

四、Jetpack Compose 更新

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

Lazy Layout

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

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

嵌套滑动

另外,则是进一步完善了 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)
)
}
}
}
}

I/O 前沿 | Android 更新一览(Day1)_开发者_09

其他更新

以上就是 Google I/O 大会 Day1 当中,咱们 Android 开发者需要重点关注的内容,如果你想了解更全面的内容,可以浏览 Android Developer 官方 YouTube 频道的回放。

  • ​​视频:What's new in Android​​
  • ​​视频:What's new in Jetpack​​


举报

相关推荐

0 条评论