Launcher3体系化之路

article/2025/8/10 4:34:01

👋 欢迎来到Launcher 3

背景

车企对于桌面的排版布局好像没有手机那般复杂,但也有一定的需求。部分场景下,要考虑的上下文比手机要多一些,比如有如下的一些场景:

  1. 手车互联。HiCar,CarPlay,AndroidAuto,这三个应用,需要桌面对应做一些定制来应付认证,连接状态不同对应不同的图标状态;
  2. 音源切换。在手机端,不同音源类型只需要系统做统一处理即可,但车机端,一旦发声,则需要申请音频焦点,由系统做音频仲裁,然后再决定是否发声;
  3. 在2的前提下,车企智能座舱的桌面,底部一般有个音乐卡片,需要对接不同的音源,比如QQ音乐,网易云,蓝牙音乐,本地电台,USB音乐等,他们一播放,媒体卡片切换成对应的音源及相关内容,这一块较复杂。
  4. Widget的重视。智能座舱总想在这个点做出一些比较花哨的功能,比如常见的长按编辑卡片,出现卡片编辑库,添加库,两者之间可以让卡片互相拖动添加或删除。在此基础上还要有动画实现排挤卡片以及卡片列表显隐动画。
  5. 应用列表。这个功能点本来很简单,但座舱的产品经理总是拿手机做对比,比如手机的应用列表可以拖动换页,拖动排挤很自然还有动画,拖动时Widget与应用icon一起可以联动,分页滑动很丝滑等。
  6. 以上能力的持久化。

现实

车企一般将智能座舱应用软件相关的开发外包给供应商,当前也确实有专业的公司,将这一块做的非常好。

但这类公司没有产品定义权,不同汽车主机厂对于同一个应用的需求差异巨大,那么同一个应用就无法做成体系化来构建基础设施。

常见的场景是应用开发人员总是赶交付节点,总是在处理各种无法理清的依赖,总是对一些复杂的模块无法深入理解,总是吃力不讨好,总是应付屎山一般的代码,恶性循环下,跑路,去应付下一个屎山。

解决方案

Launcher是Android系统中比较复杂的模块,复杂在应用列表中有应用icon,Widget,快捷方式,文件夹,弹窗,动画效果,PMS,AMS等。因为主导过座舱Launcher架构设计,核心模块开发, 主机厂一般仅需要应用列表,多任务,Widget(卡片),壁纸这几个。

比较奇葩的是,壁纸一般在SystemUI中,但因为座舱外包给供应商,有可能存在Launcher和SystemUI不是同一家公司开发的情况,就存在壁纸的实现有可能集成在Launcher中。然而不仅仅是壁纸这一个功能,有可能应用列表还需要SystemUI来实现,别问怎么会有这样的事情,因为i have experienced 🙈。

这些问题的出现是大环境下车企压缩成本求生存求利润,掌控产品定义争取白嫖供应商,多处赛马择优录取,层层传递,到底层程序员,工时博弈与压缩,复杂功能模块迎来送往,总得有一个冤大头接下,于是怪诞之事变得平常。

总而言之,搞出一套方法论来应付总是可以。如果把Launcher3中应用列表,Widget列表,持久化分开作为不同的module,也就是将Workspace,CellLayout,DragLayer等复杂的类屏蔽,上层仅需要将他们排列组合即可应付这种复杂多变的交付需求。所以就有如下几个步骤去实现:

  • Launcher3模块化-应用列表

  • Launcher3模块化-Widget列表

  • Launcher3模块化-持久化

Launcher3架构

在这里插入图片描述

这里仅关心应用列表和弹窗,最近任务暂时列为todo.

所以弹窗和Widget,数据库持久化作为定制需求较大的功能,成为目标:
在这里插入图片描述

目标将在后续文章中逐步拆解并实现。


http://www.hkcw.cn/article/PYnYANDxFy.shtml

相关文章

pikachu通关教程- over permission

如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。 水平越权 当我们以Lucy账号登录,查询个人信息时,会有…

刷leetcode hot100--矩阵6/1

1.螺旋矩阵【很久】6/1【感觉就是思路的搬运工,没完全理解】 54. 螺旋矩阵 - 力扣(LeetCode) 原来想 但是如果是奇数矩阵,遍历不到中间 解决思路: 用left,right,top,down标记/限定每次遍历的元素,每次从…

Redis最佳实践——秒杀系统设计详解

基于Redis的高并发秒杀系统设计(十万级QPS) 一、秒杀系统核心挑战 瞬时流量洪峰:100万 QPS请求冲击库存超卖风险:精准扣减防止超卖系统高可用性:99.99%服务可用性要求数据强一致性:库存/订单/支付状态同步…

搭建基于VsCode的ESP32的开发环境教程

一、VsCode搜索ESP-IDF插件 根据插件处搜索找到ESP-IDF并安装 安装完成 二、配置安装ESP-IDF 配置IDF 按照如下配置,点击安装 安装完成 三、使用案例程序 创建一个闪光灯的例子程序,演示程序编译下载。 选择blink例子,闪烁LED的程序 选…

实现RabbitMQ多节点集群搭建

目录 引言 一、环境准备 二、利用虚拟机搭建 ​ 三、镜像集群配置 四、HAProxy实现负载均衡(主用虚拟机操作) 五、测试RabbitMQ集群搭建情况 引言 在现代分布式系统中,消息队列(Message Queue)扮演着至关重要的角色,而 RabbitMQ 作为…

B站视频下载器 v1.0.4|免登录下载1080P视频

核心亮点 ✅ 无需登录下载1080P高清视频✅ 支持Windows/macOS双平台✅ 纯净无广告完全免费✅ 可单独下载视频/音频/弹幕/字幕/封面 三步极简操作 粘贴B站视频链接选择保存位置点击「开始下载」 特色功能 独立下载选项(视频/音频/弹幕/字幕/封面)登录…

LLM-MPC混合架构:车载大语言模型用来增强自动驾驶系统

1. 概述 2025年,苏黎世研究团队在RSS2025会议上正式提出「LLM-MPC混合架构」,标志着大语言模型(LLM)在自动驾驶系统中的实用化迈出关键一步。该方案旨在解决传统深度学习模型在极端交通场景中泛化能力不足的问题。通过在车载终端…

leetcode-hot-100 (矩阵)

1、矩阵置零 题目链接:矩阵置零 题目描述:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解答 方法一:使用一个二维数组 这是我看到这道题目的第一个想法&am…

黑马Java面试笔记之Redis篇(分布式锁)

面试题 我看你做的项目中,都用到了redis,你在最近的项目中那些场景使用了redis呢 如果回答了分布式锁,那么就会有以下这个问题 redis分布式锁,是如何实现的? 需要结合项目中的业务进行回答,通常情况下&…

建筑兔零基础python自学记录102|Beautiful Soup库(1)-15

1、安装Beautiful Soup 2、使用测试网页获取源代码 This is a python demo page a)法1:直接网页右键获取 b)法2:request库 import requests rrequests.get(https://python123.io/ws/demo.html) print(r.text) 3、使用Beautiful Soup库 同样解析出了源…

【Java学习笔记】枚举

枚举(enum) 一、基本介绍 引出关键字:enum,全称为enumerate 枚举是一组常量集合 理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象 二、使用场景 当一个类的属性有限定条件时(例如一个星期只能有七天&…

FFmpeg学习笔记

1. 播放器的架构 2. 播放器的渲染流程 3. ffmpeg下载与安装 3.0 查看PC是否已经安装了ffmpeg ffmpeg 3.1 下载 wget https://ffmpeg.org/releases/ffmpeg-7.0.tar.gz 3.2 解压 tar zxvf ffmpeg-7.0.tar.gz && cd ./ffmpeg-7.0 3.3 查看配置文件 ./configure …

buuctf-web

[极客大挑战 2019]Havefun 控制台检查代码修改url [极客大挑战 2019]EasySQL 密码输入 出现 sql输入错误 判断为 单引号注入 [ACTF2020 新生赛]Include 点击提示出现?file说明是文件包含问题 构造url filephp://filter/readconvert.base64-encode/resourceflag.php php:…

SAR ADC 异步逻辑设计

SAR ADC的逻辑是重要的一个模块,可以分为同步逻辑和异步逻辑,对于低速SAR ADC,一般采用同步逻辑,对于高速SAR ADC,一般采用异步逻辑。 这里讲一下异步逻辑的设计,异步逻辑一般不需要外部时钟(当…

广告拦截器:全方位拦截,畅享无广告体验

在数字时代,广告无处不在。无论是浏览网页、使用社交媒体,还是观看视频,广告的频繁弹出常常打断我们的体验,让人不胜其烦。更令人担忧的是,一些广告可能包含恶意软件,威胁我们的设备安全和个人隐私。AdGuar…

MMRL: Multi-Modal Representation Learning for Vision-Language Models(多模态表示学习)

摘要 预训练的VLMs,对于跨任务的迁移学习至关重要,然而,在few-shot数据集上微调会导致过拟合,降低在新任务上的性能。为解决这个问题,提出一种新的多模态表征学习框架(MMRL),该框架引入了一个共享、可学习…

【芯片学习】555

一、引脚作用 二、原理图 三、等效原理图 1.比较器 同相输入端大于反相输入端,输出高电平,反之亦然 2.三极管 给它输入高电平就可以导通 3.模拟电路部分 4.数字电路部分 这部分的核心是RS触发器,R-reset代表0,set是置位代表1&am…

从线性代数到线性回归——机器学习视角

真正不懂数学就能理解机器学习其实是个神话。我认为,AI 在商业世界可以不懂数学甚至不懂编程也能应用,但对于技术人员来说,一些基础数学是必须的。本文收集了我认为理解学习本质所必需的数学基础,至少在概念层面要掌握。毕竟&…

DAY 36 超大力王爱学Python

仔细回顾一下神经网络到目前的内容,没跟上进度的同学补一下进度。 作业:对之前的信贷项目,利用神经网络训练下,尝试用到目前的知识点让代码更加规范和美观。探索性作业(随意完成):尝试进入nn.Mo…

【Oracle】数据备份与恢复

个人主页:Guiat 归属专栏:Oracle 文章目录 1. Oracle备份恢复概述1.1 为什么备份这么重要?1.2 Oracle备份策略全景图 2. 物理备份详解2.1 冷备份 - 最简单粗暴的方式2.1.1 冷备份的步骤2.1.2 冷备份恢复过程 2.2 热备份 - 不停机的备份艺术2.…