Android Framework基础面试必问习题~

news2024/11/23 9:28:12

AMS

下面是一些可能会被问到的 Android Framework 中 Activity Manager Service (AMS) 相关的面试题:

1.什么是 AMS?

AMS 是 Android framework 中的一个系统进程,它负责管理应用程序生命周期,处理应用程序间的交互和协调不同组件之间的启动和销毁。

2.AMS 主要职责是什么?

AMS 的主要职责包括:处理应用程序进程的创建、启动、调度和销毁;管理应用程序之间的交互,如 Activity、Service、Broadcast 等组件之间的启动和协调;进行应用程序进程的优先级管理,确保系统资源的有效分配。

3.Android 中的四种组件分别是什么?

Android 中的四种组件分别是:Activity、Service、BroadcastReceiver 和 ContentProvider。

4.Activity 的启动过程是怎样的?

Activity 的启动过程包括如下几步:
(1)通过 Intent 向 AMS 发送一个启动请求。
(2)AMS 根据请求启动一个新的进程或者选择一个已有的进程来启动 Activity。
(3)如果选择新的进程,AMS 将通过 Zygote 进行进程的创建。
(4)如果进程已经存在则直接执行。AMS 在进程内启动 Activity 并将其展示在屏幕上。

5.Service 的生命周期是怎么样的?

Service 的生命周期包括 oncreate()、onStartCommand()、onBind()、onUnbind()、onDestroy(),其中 onStartCommand() 方法是必须要实现的。

6.AMS 如何管理应用程序进程的优先级?

AMS 通过进程优先级来动态管理应用程序的资源,根据对应进程的优先级,来进行存活与关闭。

  • 前台进程:正在与用户进行交互的程序进程,这个时候优先级最高,几乎不会被杀掉。
  • 可视进程:可见的程序进程,虽然用户可能暂时没有与其交互,但仍处于可见状态,比如应用程序的主界面。AMS 在内存紧张的时候会视情况杀掉该进程。
  • 服务进程:正在执行服务的进程,比如 music player 的播放服务,在内存不足时,将优先保留该进程。
  • 后台进程:被用户或系统切换到后台的进程,这个时候系统内存不足时,为了释放内存,AMS 会优先关闭这些进程。
  • 空进程:没有任何执行组件的进程,则被视为“空进程”,AMS 系统会优先关闭空进程,以释放其占用的系统资源。

Activity冷启动流程,其中AMS的作用有哪些?

Activity 的冷启动流程包括以下几个步骤:

1.用户点击应用程序 icon,系统会先检查当前应用程序的进程是否已经存在,如果进程不存在,那么系统就会启动新的进程。
2.如果应用程序进程已经存在,那么系统会启动 ActivityThread 线程,并通过 ActivityThread 创建和启动 Activity。
3.当 Activity 被启动时,系统会检查当前 Activity 的启动模式和 taskAffinity,根据这些信息决定要创建新的任务栈还是使用已存在的任务栈。
4.如果要创建新的任务栈,那么 AMS 会向栈顶的 Activity 发送一个 startActivitySafely 的请求,该请求会被 ActivityStackSupervisor 处理。
5.ActivityStackSupervisor 会检查该 Activity 是否可以执行启动操作,然后将其放入 Activity 栈中。
6.如果要使用已存在的任务栈,那么 AMS 会将该任务栈移到栈顶,并且将 Activity 放入该任务栈中。
7.在 Activity 被创建后,系统会加载布局文件,并执行 onCreate() 方法。
8.当 Activity 被创建后,系统会执行 onStart() 和 onResume() 方法,从而使 Activity 进入可见状态。

在这个过程中,AMS 的作用非常重要。AMS 主要负责对 Activity 的启动进行管理。AMS 会根据已经启动的 Activity 和任务栈中的 Activity 信息处理新的启动请求,判断应该创建新的任务栈还是使用已存在的任务栈。AMS 还会对任务栈进行管理,保证任务栈中 Activity 的执行顺序和前后关系符合用户的期望。如果系统出现内存不足的情况,AMS 会进行内存管理,调用 Activity 的 onDestroy() 方法,结束 Activity 的运行。

WMS

Android WMS(Window Manager Service)的面试问题及其答案

1.什么是 Android WMS?它的作用是什么?

答:Android WMS 是指 Window Manager Service,它是 Android 系统中的一个组件,主要负责管理应用程序窗口的显示和操作。WMS 负责接收来自应用程序和系统的窗口信息,然后将这些窗口组织成树形结构,并在屏幕上正确显示。

2.Android 中,如何添加一个新的窗口?

答:在 Android 中,要添加一个新的窗口,需要通过 WindowManager.addView() 方法来实现。该方法可以接收一个 View 对象,然后将它加入到屏幕中。

4.在 Android 中,什么是 WindowManager.LayoutParams?

答:WindowManager.LayoutParams 是一种布局参数,用于控制窗口的显示、大小和位置等属性。当应用程序需要添加一个新的窗口时,必须为该窗口指定一个 WindowManager.LayoutParams 对象,用来控制窗口的显示方式。

5.请描述一下 Android 中窗口的层级关系。

答:在 Android 中,窗口之间可以有层级关系,按照优先级和显示顺序排列。通常,顶部窗口的优先级最高,然后依次往下,最底部的窗口优先级最低。系统为每个窗口分配了一个层级值(WindowManager.LayoutParams.type),用来确定其优先级和显示顺序。层级值越高的窗口优先级越高,显示在越上方。

6.在 Android 中,如何控制窗口的层级关系?

答:在 Android 中,可以通过 WindowManager.LayoutParams.type 属性来控制窗口之间的层级关系。层级值越高的窗口优先级越高,可以通过调整该属性的值来控制窗口的显示顺序。

7.在 Android 中,如何响应按键和触摸事件?

答:在 Android 中,可以通过实现 View 的 onTouchEvent() 方法来响应触摸事件,通过实现 View 的 onKeyDown() 或者 onKeyUp() 方法来响应按键事件。

8.请描述一下 WindowManagerService 的作用。

答:WindowManagerService 是 Android 中的一个系统服务,它负责管理屏幕上所有窗口的显示和操作。WindowManagerService 会接收来自应用程序和系统的窗口信息,然后根据窗口的大小、位置等属性进行布局和显示。WindowManagerService 还负责处理窗口的动画、触摸事件和按键事件等操作。

WindowManager 的作用?

WindowManager 是 Android 框架中非常重要的一个服务,其主要作用是管理和调度应用程序窗口。

WindowManager 主要有以下作用

1.窗口创建和管理:WindowManager 可以创建和管理各种类型的窗口,如 Activity 窗口、对话框窗口、悬浮窗口等。WindowManager 可以为窗口设置透明度、坐标、大小、类型以及相对关系等属性。
2.窗口层级的管理:WindowManager 可以根据窗口类型、属性等对窗口进行层级的管理,保证窗口的叠放顺序正确,不会出现遮挡或屏幕外无法显示的情况。
3.窗口事件的分发:WindowManager 负责窗口事件的分发,如点击事件、触摸事件等,将事件分发给对应的窗口进行处理。
4.外部应用程序的窗口管理:WindowManager 可以管理外部应用程序的窗口,使得多个应用程序之间的窗口可以正确地显示和交互。
5.窗口样式的控制:WindowManager 可以控制窗口的显示样式和动画效果,如窗口进入动画和退出动画等。

总的来说,WindowManager 在 Android 系统中扮演的角色至关重要,它负责窗口的管理和事件分发,保证应用程序的窗口可以正确地显示、响应和交互,也为应用程序开发者提供了丰富的窗口样式和效果控制的方式。

WindowManagerGlobal

WindowManagerGlobal是Android中用于管理窗口的一个类。它是WindowManagerService的代理,同时也是ActivityManagerService的客户端。可以理解为是一个全局的窗口管理器,其功能包括创建和管理窗口,获得窗口的位置和尺寸,处理面向应用程序的View布局等。

WindowManagerGlobal主要提供了以下功能

1.创建和添加窗口
2.移除和更新窗口
3.获取窗口相关的信息,例如尺寸、位置等
4.获取窗口所属的某个View
5.处理窗口的事件分发
6.获取默认的Display

WindowManagerGlobal还提供了一些辅助方法,如计算可见性、添加转换动画、处理按键事件等。

在Android应用开发过程中,WindowManagerGlobal是非常重要的一个类,能够帮助开发者实现各种窗口效果和交互功能。

Q:WindowManagerGlobal 和 WindowManager 的关系是什么?

A:WindowManagerGlobal 是 WindowManager 的核心实现,WindowManager 实际上是一个接口。开发者不需要直接使用 WindowManagerGlobal,而是通过 WindowManager 接口去使用 WindowManagerGlobal 的功能。

Q:WindowManagerGlobal 和 Activity 是什么关系?
A:WindowManagerGlobal 是一个全局的窗口管理器,而 Activity 则是一个窗口的载体。Activity 中持有一个 WindowManager 对象,这个对象内部持有了一个 WindowManagerGlobal 对象。开发者可以通过 Activity 的 getWindowManager() 方法获取这个 WindowManager 对象,从而使用 WindowManagerGlobal 提供的功能。

PMS

PMS (Package Manager Service) 是 Android 系统中的一个重要服务,主要负责应用的安装、卸载、权限控制等操作。以下是 PMS 相关的面试题和答案:

Q:什么是 PMS?

A:PMS 是 Android 系统中的 Package Manager Service,主要负责应用的安装、卸载、权限控制等操作,是 Android 系统中非常重要的一个服务。

Q:Android 应用的安装过程是怎样的?

A:应用的安装过程大致可以分为以下几个步骤:
1.用户点击安装包或从应用商店下载并安装应用。
2.系统将应用安装包发送给 PMS。
3.PMS 验证应用是否具有正确的签名,并检查应用的权限等信息。
4.PMS 开始解压应用包,并将应用数据、资源、代码等分别保存到不同的目录下。
5.应用安装完成后,PMS 更新应用列表,并将应用加入系统中。

Q:Android 应用的卸载过程是怎样的?

A:应用的卸载过程大致可以分为以下几个步骤:
1.用户点击应用的卸载按钮或通过应用商店进行卸载。
2.系统将卸载请求发送到 PMS。
3.PMS 停止应用的运行,并删除应用的数据、资源、代码等文件。
4.PMS 更新应用列表,将已卸载的应用从系统中移除。

Q:PMS 中的权限控制是怎样实现的?
A:PMS 中的权限控制通过权限管理和权限请求两个方面来实现。应用在 Android 系统中需要声明和请求权限,PMS 则会根据应用声明的权限和用户的选择来进行权限的管理和控制。

Q:如何获取已安装应用的信息?

A:可以通过 PMS 提供的 PackageManager API 来获取已安装应用的信息,比如应用的名称、版本号、图标等。例如,可以通过以下代码获取所有已安装应用的 PackageInfo 信息:
PackageManager pm = context.getPackageManager();
List packages = pm.getInstalledPackages(0);

Q:如何安装非公开应用?
A:非公开应用需要用户手动打开“允许安装来自未知来源的应用”选项才能安装,这可以在系统设置的“安全”选项中进行设置。再次安装应用时,系统会提示用户是否允许非公开应用的安装,并让用户选择是否启用“未知来源”的应用进行安装。

总结:

由于文章篇幅有限,答案加里面会很乱,也选取了其中最常见的110道题,一共有四百页的面试题,里面包含了Android基础面试题,java,View,c++……等等一些常见的面试题,大家在此可以进行参考学习:https://qr18.cn/CKV8OZ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Electron将Vue项目打包成桌面版软件

创建Electron项目这里是直接通过官方教程创建的 要检查 Node.js 是否正确安装,请在您的终端输入以下命令: node -vnpm -v这两个命令应输出了 Node.js 和 npm 的版本信息。 创建Electron应用程序 使用脚手架创建 Electron 应用程序遵循与其他 Node.js…

【Squid 代理服务器应用】

目录 一、Squid 代理服务器1、代理的工作机制2、代理服务器的概念及其作用3、Squid 代理的类型 二、安装 Squid 服务1.编译安装 Squid2.修改 Squid 的配置文件3.Squid 的运行控制1、检查配置文件语法是否正确2、启动 Squid,第一次…

在SpringBoot中对es集群的查询操作

在进行查询之前要先给ll索引中插入数据: POST /ll/product/1 {"id":1,"title": "小米手机Mix","category": "手机","brand": "小米","price": 2899.00,"images": "http://ima…

【数据结构】——常见排序算法(演示图+代码+算法分析)

目录 1. 常见排序算法 1.2 稳定性 2. 常见排序算法的实现 2.1 插入排序 2.1.1基本思想 2.1.2代码 2.1.4算法分析 2.2 希尔排序 2.2.1基本思想 2.2.2代码 2.2.3演示图 2.2.4算法分析 2.3 选择排序 2.3.1基本思想 2.3.2代码 2.3.3演示图 2.3.4算法分析 2.4 堆排…

[Visual Studio 报错] error 找不到指定的 SDK“Microsoft

[Visual Studio 2022 报错] error : 找不到指定的 SDK“Microsoft.NET.Sdk.Web” 问题描述: 在新电脑上安装了VS2022,打开现有项目的解决方案后的时候报了这个错,所有projet文件都加载失败,如图所示: 报错分析及解决 打开项目配…

黑客是怎样炼成的?

前言 首先我谈下对黑客&网络安全的认知,其实最重要的是兴趣热爱,不同于网络安全工程师,他们大都是培训机构培训出来的,具备的基本都是防御和白帽子技能,他们绝大多数的人看的是工资,他们是为了就业而学…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 控件、脚本管理增强

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

CSS文本样式

CSS文本样式 1、字体 友情提醒&#xff1a; 字体有没有版权&#xff1f; 省略写法 语法&#xff1a; [ [ <‘font-style’> || || <‘font-weight’> || <‘font-stretch’> ]? <‘font-size’> [ / <‘line-height’> ]? <‘font-fam…

IDEA2023.1.3自带插件禁用,减少内存占用

前言 前两个星期安装了idea2023.1.3&#xff08;之前用的一直是idea2020.3版本&#xff09;&#xff0c;我发现新版界面确实更好看一些&#xff0c;而且启动速度也非常快&#xff0c;打开多个项目也一样很快&#xff0c;都是秒开。但是吧&#xff0c;它的内存占用比idea2020.3…

【若依】框架搭建,前端向后端如何发送请求,验证码的实现,开启注册功能

若依框架 若依框架&#xff08;Ruoyi&#xff09;是一款基于Spring Boot和Spring Cloud的开源快速开发平台。它提供了一系列的基础功能和通用组件&#xff0c;能够帮助开发者快速构建企业级应用。若依框架采用了模块化的设计理念&#xff0c;用户可以选择需要的功能模块进行集…

(03)QEMU模拟ATF启动

QEMU启动 准备一个目录qemu_boot存放所有镜像文件。最终启动需要的镜像如下所示。 Image QEMU_EFI.fd bl1.bin bl2.bin bl31.bin fip.bin flash.bin rootfs.cpio.gz准备镜像 EDK2 下载QEMU_EFI。 wget http://snapshots.linaro.org/components/kernel/leg-virt-tian…

go-redis

安装redis&#xff08;docker&#xff09; sudo docker pull redis sudo docker images 在官网下载redis.conf配置文件 redis官网&#xff1a;http://www.redis.cn/download.html 将下载后的压缩包解压得到redis.conf文件&#xff0c;放到自己的目录&#xff0c;我的是/hom…

数据结构与算法——图

&#x1f60a;数据结构与算法——图 &#x1f680;前言&#x1f680;图的基本概念&#x1f6a2;图的定义&#x1f6a2;图的基本操作&#x1f6a2;无向图和有向图&#x1f6a2;完全图&#x1f6a2;顶点的度、入度和出度&#x1f6a2;子图&#x1f6a2;顶点关系常用术语&#x1f…

我想在我自己的系统中加入微信支付功能,原来这么简单!!!

微信支付功能实现 一、创建SpringBoot项目 我们首先创建一个基本的SpringBoot项目。添加相关的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>&…

php宝塔搭建EMLOG站长工具箱网站自适应PC手机端php源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。本期给大家带来一套站长工具箱网站自适应PC手机端php源码。感兴趣的朋友可以自行下载学习。 技术架构 PHP5.6 nginx mysql5.6 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff0c;宝塔添…

SciencePub学术 | 数据处理类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 数据处理类重点SCI&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 数据处理类重点SCIE&EI 【期刊简介】IF&#xff1a;3.5-4.0&#xff0c;JCR2区&#xff0c;中科院4区&#xff1b; 【出版社】…

CSS选择器常见用法

目录 一.总体分类 二.基础选择器 &#xff08;1&#xff09;标签选择器 &#xff08;2&#xff09;类选择器 &#xff08;3&#xff09;id选择器 &#xff08;4&#xff09;通配符选择器&#xff08;特殊&#xff09; 三.复合选择器 &#xff08;1&#xff09;后代选择器 &…

注意看!!!Linux中Ubuntu22.04之SVN的三种配置方式【详解~】

注意看&#xff01;&#xff01;&#xff01;Linux中Ubuntu22.04之SVN的三种配置方式【详解&#xff5e;】 配置目录大全<1>I、 安装&#xff08;易上手&#x1f446;&#xff09;II、使用SVN&#xff08;简单易操作&#xff09;III、配置SVN&#xff08;精通&#xff09…

一个事务回滚问题的解决

同事遇见一个事务回滚的问题&#xff0c;从controller提交的时候出现&#xff0c;transaction marked as rollbackonly 这个错误。 从调用栈上来看&#xff0c;没啥可用的信息&#xff0c;另外基本没有啥用户代码&#xff0c;都是框架JPA的代码 这个事其实以前遇见过类似的&…