Jetpack WindowManager 1.1 稳定版

Jetpack WindowManager 1.1 稳定版
www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版

作者 / Android 开发者关系工程师 Francesco Romano

自 Jetpack WindowManager 1.0 稳定版发布的一年多以来,可折叠设备和大屏设备领域发生了诸多变化。许多新款设备都已进入市场,大量新用例也已解锁!

Jetpack WindowManager 库在帮助您优化您的 Android 应用上发挥重要作用,使其能够适用于不同的设备类型。并且此版本还包含多项新功能和改进,是一个重大的里程碑式进展。

让我们来回顾一下 Jetpack WindowManager 库涵盖的所有用例。

获取窗口指标 (和大小类别!)

过去,开发者通过设备显示尺寸来决定其应用布局,但随着不同设备类型 (如可折叠设备) 和显示模式 (如多窗口模式和多显示屏模式) 的出现,了解应用窗口的大小而不是设备的显示尺寸变得至关重要。

Jetpack WindowManager WindowMetricsCalculator 界面可以提供可靠的数据来源,以帮助您衡量当前可用于显示您应用的屏幕空间。

WindowMetricsCalculator

https://developer.android.google.cn/reference/kotlin/androidx/window/layout/WindowMetricsCalculator

在此基础上,窗口大小类别是一组视口划分点,有助于您设计、开发和测试响应式和自适应应用布局。此类划分点专门用于平衡布局的简单性和灵活性,以便针对特殊情况优化您的应用。

窗口大小类别

https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes#window_size_classes

对于基于 View 的应用,您可以使用以下代码段来计算窗口大小类别:

private fun computeWindowSizeClasses() {
        val metrics = WindowMetricsCalculator.getOrCreate()
            .computeCurrentWindowMetrics(this)
        val width = metrics.bounds.width()
        val height = metrics.bounds.height()
        val density = resources.displayMetrics.density
        val windowSizeClass = WindowSizeClass.compute(width/density, height/density)


        // use windowSizeClass.windowHeightSizeClass and windowSizeClass.windowWidthSizeClass
}

您可以参阅 "支持不同屏幕尺寸" 开发者指南了解详细信息。

支持不同屏幕尺寸

https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes

让应用能够感知折叠

Jetpack WindowManager 还提供优化可折叠设备布局所需的所有 API。

具体而言,您可以使用 WindowInfoTracker 查询 FoldingFeature 信息,如

  • 状态: 设备的折叠状态: FLAT 或 HALF_OPENED
  • 方向: 折叠或设备合页的方向: HORIZONTAL 或 VERTICAL
  • 遮挡类型: 折叠或合页是否遮挡部分显示屏: NONE 或 FULL
  • 是否分离: 折叠或合页是否创建了两个逻辑显示区域: true 或 false
  • 边界: 应用窗口内功能的边界矩形 (继承自 DisplayFeature)

WindowInfoTracker

https://developer.android.google.cn/reference/kotlin/androidx/window/layout/WindowInfoTracker

FoldingFeature

https://developer.android.google.cn/reference/androidx/window/layout/FoldingFeature

DisplayFeature

https://developer.android.google.cn/reference/androidx/window/layout/DisplayFeature#getBounds%28%29

您可以通过 Flow 访问这些数据:

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    lifecycleScope.launch(Dispatchers.Main) {
        lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
            WindowInfoTracker.getOrCreate(this@MainActivity)
                .windowLayoutInfo(this@MainActivity)
                .collect { layoutInfo ->
                    // New posture information
                    val foldingFeature = layoutInfo.displayFeatures
                    // use the folding feature to update the layout
                }
        }
    }
}

Flow

https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/

一旦收集到 FoldingFeature 信息,您便可以使用这些数据为当前设备状态创建优化布局,例如实现桌面模式。您可以在 MediaPlayerActivity.kt 中查看桌面模式的示例。

MediaPlayerActivity.kt

https://github.com/android/platform-samples/blob/main/samples/user-interface/windowmanager/src/main/java/com/example/platform/ui/windowmanager/MediaPlayerActivity.kt

您还可以访问我们的 Codelab 了解如何使用 Jetpack WindowManager 支持可折叠设备和双屏设备:

https://developer.android.google.cn/codelabs/android-window-manager-dual-screen-foldables

并排显示两个 Activity

除了上述功能您还可以使用最新的稳定版 Jetpack WindowManager API: Activity 嵌入。

Activity 嵌入

https://developer.android.google.cn/reference/kotlin/androidx/window/embedding/package-summary

自 Android 12L 起,Activity 嵌入允许采用传统多 Activity 架构的开发者通过同一应用,甚至多个应用在大屏设备上并排显示多个 Activity。

这是以最少的代码更改甚至无需代码更改便可以实现列表详情布局的绝佳方式。

注意: Modern Android Development (MAD) 建议使用基于 Jetpack API (包括 Jetpack Compose) 的单 Activity 架构。如果您的应用使用 Fragment,请参阅 SlidingPaneLayout。Activity 嵌入专为无法轻松更新为 MAD 的多 Activity 旧版应用而设计。

SlidingPaneLayout

https://developer.android.google.cn/jetpack/androidx/releases/slidingpanelayout

这也是该库中最大的变化,目前在 Jetpack WindowManager 1.1 版中,Activity 嵌入 API 非常稳定!

不仅如此,该 API 目前的功能也更加丰富,您可以通过此 API:

  • 修改分屏行为 (分屏比例、规则、结束行为)
  • 定义占位符
  • 在运行时环境中检查 (并更改) 分屏状态
  • 实现水平分屏
  • 在全窗口中启动模态

如果您想探索 Activity 嵌入,可访问专用 Codelab 了解如何使用 Activity 嵌入构建列表详情布局:

https://developer.android.google.cn/codelabs/large-screens/activity-embedding

许多应用都已开始在生产环境中使用 Activity 嵌入,例如 WhatsApp:

www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版

还有 eBay!

www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版

实现包含多 Activity 的列表详情布局并不是 Activity 嵌入的唯一用例。

自 Android 13 (API 级别 33) 起,应用可以嵌入来自其他应用的 Activity。

跨应用 Activity 嵌入支持多个 Android 应用的 Activity 进行可视化集成处理。系统会在屏幕上并排或上下显示托管应用的 Activity 和其他应用的嵌入 Activity,就像在单一应用 Activity 嵌入中一样。

托管应用会按照实现单一应用 Activity 嵌入的相同方式实现跨应用 Activity 嵌入,但出于安全原因,被嵌入的应用必须同意并选择加入。

您可以在 "Activity 嵌入" 开发者指南中深入了解跨应用嵌入:

Activity 嵌入

https://developer.android.google.cn/guide/topics/large-screens/activity-embedding#cross-application

总结

如果您想优化您的应用在不同设备类型上的用户体验,Jetpack WindowManager 便是您应该学习的最重要的库之一。

WindowManager 还将在每个版本中添加有趣的新功能,敬请关注 1.2 版本中即将推出的功能。

1.2 版本

https://developer.android.google.cn/jetpack/androidx/releases/window#version_12_2

您可以参阅 Jetpack WindowManager 文档和示例应用,即刻开始使用 WindowManager!

文档

https://developer.android.google.cn/jetpack/androidx/releases/window

示例应用

https://github.com/android/platform-samples/tree/main/samples/user-interface/windowmanager

开发者福利月

在十月,开启专属开发者们的快乐!线下线上精彩互动活动、神秘礼品、干货资料包统统安排上,让惊喜和期待填满整月。

赶快来,收获快乐和福利吧!

www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版
www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版

点击屏末 | 阅读原文 | 即刻开始使用 Jetpack WindowManager

www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版
www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版
www.zeeklog.com  - Jetpack WindowManager 1.1 稳定版

Read more

60个“特征工程”计算函数(Python代码)

60个“特征工程”计算函数(Python代码)

转自:coggle数据科学 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。 特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的技巧,此处我们将平时用得最多的聚合操作罗列在下方。 最近刚好看到一篇文章汇总了非常多的聚合函数,就摘录在下方,供许多初入竞赛的朋友参考。 聚合特征汇总 pandas自带的聚合函数 * 其它重要聚合函数 其它重要聚合函数&分类分别如下。 def median(x):     return np.median(x) def variation_coefficient(x):     mean = np.mean(x)     if mean != 0:         return np.std(x) / mean     else:         return np.nan def variance(x):     return

By Ne0inhk
90w,确实可以封神了!

90w,确实可以封神了!

要说24年一定最热的技术,还得是AIGC! 前段时间阿里旗下的开源项目,登上GitHub热榜! AI大热,如今ChatGPT的优异表现,必然会出现各种细分场景应用的工具软件,和大量岗位项目! 山雨欲来风满楼,强人工智能的出现,所有科技公司已经开始巨量扩招此领域的人才。算法的岗位,近三个月已经增长68%!这件事在HR届也是相当震撼的。 目前各行各业都不景气的市场,人工智能岗位却一直保持常青!甚至同属AI边缘岗都比其他岗薪资高40%! 与此同时,AI算法岗上岸也不简单,竞争激烈,好公司核心岗位不用说,谁都想去。 所以事实就是,想要上岸,门槛也逐渐变高,项目经历、实习经历都很重要,越早明白这个道理就越能提前建立起自己的优势。 但我在b站逛知识区的时候,经常看到有些同学,因为一些客观原因导致无法参加实习,这种情况下,如果你想提升背景,增加项目经历的话,可以试试这个《CV/NLP 算法工程师培养计划》。 目前已经有上千位同学通过该计划拿到offer了,最新一期学员就业薪资最高能拿到78K!年薪94w! 优势就是有BAT大厂讲师带领,手把手带做AI真实企业项目(包含CV、NLP等

By Ne0inhk
再见nohup!试试这个神器,Python Supervisor!

再见nohup!试试这个神器,Python Supervisor!

👇我的小册 45章教程:() ,原价299,限时特价2杯咖啡,满100人涨10元。 作者丨Ais137 https://juejin.cn/post/7354406980784373798 1. 概述 Supervisor 是一个 C/S 架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。 2. 问题场景 在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是消费者进程等。这类进程通常是作为后台进程持久化运行的。 一般的部署方法是通过 nohup cmd & 命令来部署。但是这种方式有个弊端是在某些情况下无法保证目标进程的稳定性运行,有的时候 nohup 运行的后台任务会因为未知原因中断,从而导致服务或者消费中断,进而影响项目的正常运行。 为了解决上述问题,通过引入 Supervisor 来部署持久化进程,提高系统运行的稳定性。 3. Supervisor 简介 Supervisor is a client/

By Ne0inhk
第一本给程序员看的AI Agent图书上市了!

第一本给程序员看的AI Agent图书上市了!

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔·盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI Ascent 2024演讲中高赞:AI Agent是一个令人兴奋的趋势,所有从事AI开发的人都应该关注。而国内的各科技巨头也纷纷布局AI Agent平台,如:钉钉的AI PaaS、百度智能云千帆大模型平台等等。 Agent 是未来最重要的智能化工具。对于程序员来说,是时候将目光转向大模型的应用开发了,率先抢占AI的下一个风口AI Agent。 小异带来一本新书《大模型应用开发 动手做 AI Agent》,这本书由《GPT图解》的作者黄佳老师创作,从0到1手把手教你做AI Agent。现在下单享受5折特惠! ▼点击下方,即可5折起购书 有这样一本秘籍在手,程序员们这下放心了吧,让我们先来揭开 Agent 的神秘面纱。 AI Agent 面面观

By Ne0inhk