persistent属性工作流程分析
sequenceDiagram ActivityManagerService ->> ActivityManagerService: systemReady ActivityManagerService ->> ActivityManagerService: startPersistentApps ActivityManagerService ->> ActivityManagerService: addAppLocked ActivityManagerService ->> ProcessList: startProcessLocked
Compose中判断和监听网络连接状态
要判断和监听网络连接状态,要使用的系统服务是 ConnectivityManager 对象,可以通过 context.getSystemService(Context.CONNECTIVITY_SERVICE) 来获得。所以首先可以定义一个Context的扩展属性来方便的获取该对象: 12private val Context.connectivityManager: ConnectivityManager get() = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager 判断网络瞬时连接状态也就是判断当前那一刻的连接状态,一般用于请求后台接口前的检查准备工作。 如果是在Android 6.0 以下(API < 23)系统版本,可以使用 ConnectivityManager 的getActiveNetworkInfo()方法先拿到返回的NetworkInfo对象,然后调用NetworkInfo的 isConnected()方法来判断。 如果是在Android 6.0...
Framework开发 分区介绍
Android分区架构详解1. 核心系统分区boot分区 作用: 包含Linux内核和初始RAM磁盘(initramfs) 内容: 内核、设备树、启动参数 大小: 通常16-64MB 更新频率: 较少,主要在系统升级时 system分区 作用: 包含Android系统框架和核心应用 内容: framework-res.apk、framework.jar、SystemUI等 大小: 通常1-3GB 更新频率: 经常,包含您的修改 vendor分区 作用: 包含厂商特定的驱动和HAL 内容: 硬件抽象层、厂商驱动、闭源库 大小: 通常500MB-2GB 更新频率: 中等,厂商更新时 2. 用户数据分区userdata分区 作用: 存储用户数据和已安装应用 内容: 应用数据、用户文件、设置 大小: 设备总存储的大部分 更新频率: 持续,用户使用过程中 cache分区 作用: 临时缓存和OTA更新包 内容: 系统缓存、下载的更新包 大小: 通常100-500MB 更新频率: 频繁,可被清理 3. 特殊功能分区recovery分区 作用: 系统恢复和更新环境 内容:...
Framework开发 认识Android.bp文件
Android.bp 文件详解Android.bp是Android构建系统Soong的核心配置文件,用于定义模块的构建规则。它替代了传统的Android.mk文件,提供了更简洁、更强大的构建配置方式。 基本结构1. 包声明 123package { default_applicable_licenses: ["Android-Apache-2.0"],} 定义模块的许可证信息 指定默认的许可证类型 2. 模块定义 12345android_app { name: "ModuleName", srcs: ["src/**/*.java"], // 其他配置...} 主要模块类型android_app - Android应用程序 12345678android_app { name: "MyApp", srcs: ["src/**/*.java"], resource_dirs:...
01 WindowManagerService添加View
我来分析应用进程的 WindowManager 如何调用到 WindowManagerService.addWindow() 的完整调用链,并绘制时序图。 应用进程 WindowManager 到 WindowManagerService.addWindow() 调用链分析核心调用流程sequenceDiagram participant App as 应用进程 participant WMI as WindowManagerImpl participant WMG as WindowManagerGlobal participant VRI as ViewRootImpl participant Session as Session participant WMS as WindowManagerService App->>WMI: 1. addView(view, params) Note over WMI: applyTokens(params)设置window token等 ...
02 Android 窗口多用户显示机制
[MODE: RESEARCH] Android 窗口多用户显示机制总结核心概念1. 用户隔离 每个用户有独立的应用和数据 窗口默认仅对创建用户可见 系统级窗口可跨用户显示 2. UID 与用户 ID 1234// UID 结构:userId * PER_USER_RANGE + appId// PER_USER_RANGE = 100000// 例如:UID 10140 = 0 * 100000 + 10140 (系统用户,SystemUI)// 例如:UID 100001 = 1 * 100000 + 1 (用户1,应用ID 1) 窗口可见性判断机制1. 主要判断方法 12345// WindowState.showToCurrentUser()boolean showToCurrentUser() { final WindowState win = getTopParentWindow(); return win.showForAllUsers() ||...
SystemUi SYSTEM ALERT类型窗口无法在子用户下显示
SystemUI 在子用户下窗口不显示的问题分析 问题现象 在子用户下,SystemUI 通过 WindowManager.addView 创建的窗口不显示 窗口类型为 TYPE_SYSTEM_ALERT 或 TYPE_APPLICATION_OVERLAY 根本原因 SystemUI 使用 sharedUserId=”android.uid.systemui”,对应 UID 10140 该 UID 被解析为系统用户(userId=0),导致窗口归属到系统用户 多用户可见性判断依赖 mShowUserId,与当前用户不匹配时被过滤 UID 计算 12345678// UserHandle.getUserId() 实现public static @UserIdInt int getUserId(int uid) { if (MU_ENABLED) { return uid / PER_USER_RANGE; // 10140 / 100000 = 0 } else { ...
Android 系统中的用户 ID(UID)管理
1. UID 概述在Android操作系统中,用户ID(UID)是用于标识用户、应用和进程的重要机制。UID用于隔离不同应用之间的资源和数据,管理权限,以及优化资源使用。每个安装在设备上的应用都会被分配一个唯一的UID。 2. UID 的分类2.1 系统核心应用UID系统核心应用是Android操作系统正常运行所必需的应用,通常具有系统级别的权限。这些应用的UID通常在较低的范围内,例如0到FIRST_APPLICATION_UID - 1(FIRST_APPLICATION_UID通常为10000)。 示例: UID 0:root用户,具有最高权限。 UID 1000:system用户,用于系统服务。 UID 1001:shell用户,用于命令行工具。 UID 1002:radio用户,用于无线通信服务。 UID 1003:log用户,用于日志服务。 …:其他系统核心应用的UID。 2.2...
Context
classDiagram class Context { } class ContextImpl class ContextWrapper ContextImpl --|> Context ContextWrapper --|> Context ApplicationContext --|> Context note for ContextThemeWrapper "A context wrapper that allows you to modify or replace the theme of the wrapped context." class ContextThemeWrapper { + setTheme(Theme theme) } class Activity ContextThemeWrapper --|> ContextWrapper Application --|> ContextWrapper Service --|> ContextWrapper class WindowProvider { + int...
01 Framework 窗口装饰
CaptionWindowDecoration 显示方式分析1. 整体架构CaptionWindowDecoration 采用了多层Surface架构来显示窗口装饰: 12345Task Surface (任务表面)├── Decoration Container Surface (装饰容器表面) └── Caption Container Surface (标题栏容器表面) └── View Host (视图宿主) └── Caption View (标题栏视图) 2. 显示机制详解A. Surface层次结构12345678910111213// 第1层:Decoration Container SurfacemDecorationContainerSurface = builder .setName("Decor container of Task=" + mTaskInfo.taskId) .setContainerLayer() .setParent(mTaskSurface) //...