干货答疑分享记录:as导入问题,LSP含义,分屏进入SplashScreen

devtools/2025/1/18 4:50:28/

背景:

vip学员群经常会有学员遇到一些常见的android framework开发问题,近期收集整理一些疑问,主要有以下3个:

1、android studio对源码进行导入时候,老是无法跳转到系统source code

2、学员在群里询问dumpOtherProcessesInfoLSP中末尾的LSP含义是啥

3、学员询问分屏过程中请问到底有没有Splash Screen的画面展示,看到有图层,但是没有看到有Icon

下面针对上面3个学员的疑问进行分别解答记录。

问题1:

android studio对源码进行导入时候,老是无法跳转到系统source code
这个问题学员已经按照我之前分享的blog
aosp源码导入android studio常见问题汇总-学员答疑
对相关的android.iml进行了相关的修改,把sourceFolder放到最顶部了
在这里插入图片描述
但是发现
在这里插入图片描述
最后原因发现是
在这里插入图片描述

问题2:

有学员提问ams代码中的dumpOtherProcessesInfoLSP方法尾部的LSP是啥含义
在这里插入图片描述

正确解答其实在ActivityManagerService类中本身有对这个LSP等进行解释,其实指的是锁的范围。

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

   /*** The lock for process management.** <p>* This lock is widely used in conjunction with the {@link #mGlobalLock} at present,* where it'll require any of the locks to read from a data class, and both of the locks* to write into that data class.** For the naming convention of function suffixes:* <ul>*    <li>-LOSP:    Locked with any Of global am Service or Process lock</li>*    <li>-LSP:     Locked with both of global am Service and Process lock</li>*    <li>-Locked:  Locked with global am service lock alone</li>*    <li>-LPr:     Locked with Process lock alone</li>* </ul>* For the simplicity, the getters/setters of the fields in data classes usually don't end with* the above suffixes even if they're guarded by the locks here.* </p>** <p>* In terms of locking order, it should be right below to the {@link #mGlobalLock},* and above everything else which used to be underneath the {@link #mGlobalLock}.* As of today, the core components(services/providers/broadcasts) are still guarded by* the {@link #mGlobalLock} alone, so be cautious, avoid from acquiring the {@link #mGlobalLock}* while holding this lock.* </p>**/final ActivityManagerGlobalLock mProcLock = ENABLE_PROC_LOCK? new ActivityManagerProcLock() : mGlobalLock;

问题3:

学员在学习新版本aosp15的分屏功能时候,使用Winscope分析分屏启动发现有如下不理解的画面:

在这里插入图片描述学员疑问在正常情况下Splash窗口都是有Icon的,这里明显没有看到有Icon,只看到一个背景图,这个是为啥?

这里其实可以通过SplashScreenView相关日志对比看出相关的线索:
正常打开App时候,展示的SplashScreenView的相关打印

01-15 13:43:58.920   816   947 D SplashScreenView: Icon: view: android.widget.ImageView{90f9ece V.ED..... ......I. 0,0-0,0 #1020504 android:id/splashscreen_icon_view} drawable: com.android.wm.shell.startingsurface.SplashscreenIconDrawableFactory$ImmobileIconDrawable@f5d91ef size: 560

可以看出这里有相关的Icon信息,大小是560

分屏情况下的打印:
可以看到size大小是0

01-15 13:44:25.555   816   947 D SplashScreenView: Icon: view: null drawable: null size: 0

调试发现其实在SplashScreenView创建时候会根据mSuggestType来设置icon相关的情况:
在这里插入图片描述调试发现分屏情况下mSuggestType是STARTING_WINDOW_TYPE_SOLID_COLOR_SPLASH_SCREEN类型。

  /*** Prefer solid color splash screen starting window.* @hide*/public static final int STARTING_WINDOW_TYPE_SOLID_COLOR_SPLASH_SCREEN = 3;

更多framework干货学习,请关注下面“千里马学框架”


http://www.ppmy.cn/devtools/151472.html

相关文章

如何优化Elasticsearch大文档查询?

记录一次业务复杂场景下DSL优化的过程 背景 B端商城业务有一个场景就是客户可见的产品列表是需要N多闸口及各种其它逻辑组合过滤的&#xff0c;各种闸口数据及产品数据都是存储在ES的(有的是独立索引&#xff0c;有的是作为产品属性存储在产品文档上)。 在实际使用的过程中&a…

Linux安装docker,安装配置xrdp远程桌面

Linux安装docker&#xff0c;安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…

LeetCode - #182 Swift 实现找出重复的电子邮件

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

GoLang教程004:流程控制和if语句介绍

文章目录 3、流程控制3.1 流程控制的作用3.2 控制语句的分类3.3 if分支3.3.1 单分支3.3.2 多分支3.3.3 双分支 3、流程控制 3.1 流程控制的作用 流程控制的作用&#xff1a;流程控制语句是用来控制程序中各语句执行顺序的语句&#xff0c;可以把语句组合成能完成一定功能的小…

HBase深度历险

作者&#xff1a;京东物流 于建飞 简介 HBase 的全称是 Hadoop Database&#xff0c;是一个分布式的&#xff0c;可扩展&#xff0c;面向列簇的数据库&#xff0c;是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。本文会像剥洋葱一样&#xff0c…

LLama 架构一览

LLama 架构一览 预训练Transformer 架构RMSNorm 归一化&#xff1a;为什么大模型llama选RMSNorm&#xff0c;而不是其他&#xff1f;SwiGLU 激活函数&#xff1a;为什么大模型llama选SwiGLU激活函数&#xff0c;而不是其他&#xff1f;RoPE 旋转位置编码&#xff1a;为什么大模…

Hive迁移,小表(10G以下的),分区快速修复批量脚本

hive迁移要迁移元数据&#xff08;mysql&#xff09;&#xff0c;要迁移实际数据hdfs&#xff0c;迁移完后如果有分区&#xff0c;通常是不能访问的。 这里就要修复分区了&#xff0c;如果是大表&#xff0c;几十T这种&#xff0c;迁移可能花了24小时&#xff0c;那么你修复分…

后端程序打成 JAR 包的详细步骤及解释

在后端开发中&#xff0c;将程序打成 JAR 包是一个常见的操作&#xff0c;它可以方便程序的部署和分发。本文将详细介绍几种将后端程序打成 JAR 包的方法及其相应的解释&#xff0c;帮助你更好地完成项目的打包工作。 一、使用 Maven 构建工具&#xff08;适用于 Maven 项目&a…