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

news/2025/1/17 2:45:30/

背景:

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/news/1563770.html

相关文章

ChatGLM:从GLM-130B到GLM-4全系列大语言模型

摘要 我们介绍了ChatGLM&#xff0c;这是一个不断进化的大语言模型系列&#xff0c;我们一直在持续开发中。本报告主要聚焦于GLM-4语言系列&#xff0c;包括GLM-4、GLM-4-Air和GLM-4-9B。它们代表了我们从ChatGLM前三代中汲取的所有见解和经验教训所训练出的最强大模型。迄今为…

【DevOps】Jenkins配置钉钉邮件通知

Jenkins配置钉钉邮件通知 文章目录 Jenkins配置钉钉邮件通知介绍一、顶顶群机器人设置1.1、点击添加机器人 二、顶顶Webhook配置2.1、安装顶顶插件2.2、顶顶机器人配置 三、创建Pipeline项目(测试) 介绍 Jenkins作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直…

【Python】使用python 对excel文件进行加密

最近在跟同事对接工作的时候&#xff0c;我需要把Excel文件发给对方。 但是由于文件内容的私密性&#xff0c;需要对Excel文件进行加密&#xff0c;保护文件以免给第三方看到&#xff0c;保障数据的安全。 在Python中&#xff0c;有多种方法可以对Excel文件进行加密。以下是几…

React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)

触发渲染过程——renderRoot renderRoot 是一个函数&#xff0c;用于触发渲染工作。它通常会调用并递归地执行一系列的渲染任务&#xff0c;直到完成整个更新过程。这个过程包括执行 Fiber 树中的 beginWork 和 completeWork&#xff0c;以及渲染新状态或 DOM。 function ren…

实用好软-----电脑端链接手机 免root权限管理手机 调试安卓

来自知名开发者开发。而且近期更新了全功能的搞机工具。对于链接电脑进行管理手机比较方便。新版重写了多线程逻辑&#xff0c;修复大量卡顿与无响应问题&#xff0c;同时优化了设备检测逻辑&#xff0c;启动更快更丝滑。还有大量新增免ROOT功能。对于玩机来说非常不错 由于AD…

MySQL数据库(SQL分类)

SQL分类 分类全称解释DDLData Definition Language数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;DMLData Manipulation Language数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQLData Query Languag…

Go语言开发高效的RPC服务的方法

在Go语言中开发高效的RPC&#xff08;远程过程调用&#xff09;服务&#xff0c;可以通过以下几个关键步骤和方法来实现&#xff1a; 一、定义服务接口 首先需要定义需要提供的RPC方法及其参数和返回值。可以使用Go语言的interface类型来定义RPC接口&#xff0c;同时也可以为…

微商关系维系与服务创新:链动2+1模式、AI智能名片与S2B2C商城小程序的应用研究

摘要&#xff1a;随着社交媒体的蓬勃发展&#xff0c;微商作为一种新兴的商业模式&#xff0c;在人与人之间关系网络的基础上逐渐兴起。然而&#xff0c;与实体商家和传统电商相比&#xff0c;微商面临着更大的关系维系挑战。为了保持竞争力&#xff0c;微商必须不断创新服务模…