一.AMS
下面是一些可能会被问到的 Android Framework 中 Activity Manager Service (AMS) 相关的面试题:
- 什么是 AMS?
AMS 是 Android framework 中的一个系统进程,它负责管理应用程序生命周期,处理应用程序间的交互和协调不同组件之间的启动和销毁。
- AMS 主要职责是什么?
AMS 的主要职责包括:处理应用程序进程的创建、启动、调度和销毁;管理应用程序之间的交互,如 Activity、Service、Broadcast 等组件之间的启动和协调;进行应用程序进程的优先级管理,确保系统资源的有效分配。
- Android 中的四种组件分别是什么?
Android 中的四种组件分别是:Activity、Service、BroadcastReceiver 和 ContentProvider。
- Activity 的启动过程是怎样的?
Activity 的启动过程包括如下几步:
(1)通过 Intent 向 AMS 发送一个启动请求。
(2)AMS 根据请求启动一个新的进程或者选择一个已有的进程来启动 Activity。
(3)如果选择新的进程,AMS 将通过 Zygote 进行进程的创建。
(4)如果进程已经存在则直接执行。AMS 在进程内启动 Activity 并将其展示在屏幕上。
- Service 的生命周期是怎么样的?
Service 的生命周期包括 oncreate()、onStartCommand()、onBind()、onUnbind()、onDestroy(),其中 onStartCommand() 方法是必须要实现的。
- AMS 如何管理应用程序进程的优先级?
AMS 通过进程优先级来动态管理应用程序的资源,根据对应进程的优先级,来进行存活与关闭。
- 前台进程:正在与用户进行交互的程序进程,这个时候优先级最高,几乎不会被杀掉。
- 可视进程:可见的程序进程,虽然用户可能暂时没有与其交互,但仍处于可见状态,比如应用程序的主界面。AMS 在内存紧张的时候会视情况杀掉该进程。
- 服务进程:正在执行服务的进程,比如 music player 的播放服务,在内存不足时,将优先保留该进程。
- 后台进程:被用户或系统切换到后台的进程,这个时候系统内存不足时,为了释放内存,AMS 会优先关闭这些进程。
- 空进程:没有任何执行组件的进程,则被视为“空进程”,AMS 系统会优先关闭空进程,以释放其占用的系统资源。
Activity冷启动流程,其中AMS的作用有哪些?
Activity 的冷启动流程包括以下几个步骤:
-
用户点击应用程序 icon,系统会先检查当前应用程序的进程是否已经存在,如果进程不存在,那么系统就会启动新的进程。
-
如果应用程序进程已经存在,那么系统会启动 ActivityThread 线程,并通过 ActivityThread 创建和启动 Activity。
-
当 Activity 被启动时,系统会检查当前 Activity 的启动模式和 taskAffinity,根据这些信息决定要创建新的任务栈还是使用已存在的任务栈。
-
如果要创建新的任务栈,那么 AMS 会向栈顶的 Activity 发送一个 startActivitySafely 的请求,该请求会被 ActivityStackSupervisor 处理。
-
ActivityStackSupervisor 会检查该 Activity 是否可以执行启动操作,然后将其放入 Activity 栈中。
-
如果要使用已存在的任务栈,那么 AMS 会将该任务栈移到栈顶,并且将 Activity 放入该任务栈中。
-
在 Activity 被创建后,系统会加载布局文件,并执行 onCreate() 方法。
-
当 Activity 被创建后,系统会执行 onStart() 和 onResume() 方法,从而使 Activity 进入可见状态。
在这个过程中,AMS 的作用非常重要。AMS 主要负责对 Activity 的启动进行管理。AMS 会根据已经启动的 Activity 和任务栈中的 Activity 信息处理新的启动请求,判断应该创建新的任务栈还是使用已存在的任务栈。AMS 还会对任务栈进行管理,保证任务栈中 Activity 的执行顺序和前后关系符合用户的期望。如果系统出现内存不足的情况,AMS 会进行内存管理,调用 Activity 的 onDestroy() 方法,结束 Activity 的运行。
一.WMS
Android WMS(Window Manager Service)的面试问题及其答案:
- 什么是 Android WMS?它的作用是什么?
答:Android WMS 是指 Window Manager Service,它是 Android 系统中的一个组件,主要负责管理应用程序窗口的显示和操作。WMS 负责接收来自应用程序和系统的窗口信息,然后将这些窗口组织成树形结构,并在屏幕上正确显示。
- Android 中,如何添加一个新的窗口?
答:在 Android 中,要添加一个新的窗口,需要通过 WindowManager.addView() 方法来实现。该方法可以接收一个 View 对象,然后将它加入到屏幕中。
- 在 Android 中,什么是 WindowManager.LayoutParams?
答:WindowManager.LayoutParams 是一种布局参数,用于控制窗口的显示、大小和位置等属性。当应用程序需要添加一个新的窗口时,必须为该窗口指定一个 WindowManager.LayoutParams 对象,用来控制窗口的显示方式。
- 请描述一下 Android 中窗口的层级关系。
答:在 Android 中,窗口之间可以有层级关系,按照优先级和显示顺序排列。通常,顶部窗口的优先级最高,然后依次往下,最底部的窗口优先级最低。系统为每个窗口分配了一个层级值(WindowManager.LayoutParams.type),用来确定其优先级和显示顺序。层级值越高的窗口优先级越高,显示在越上方。
- 在 Android 中,如何控制窗口的层级关系?
答:在 Android 中,可以通过 WindowManager.LayoutParams.type 属性来控制窗口之间的层级关系。层级值越高的窗口优先级越高,可以通过调整该属性的值来控制窗口的显示顺序。
- 在 Android 中,如何响应按键和触摸事件?
答:在 Android 中,可以通过实现 View 的 onTouchEvent() 方法来响应触摸事件,通过实现 View 的 onKeyDown() 或者 onKeyUp() 方法来响应按键事件。
- 请描述一下 WindowManagerService 的作用。
答:WindowManagerService 是 Android 中的一个系统服务,它负责管理屏幕上所有窗口的显示和操作。WindowManagerService 会接收来自应用程序和系统的窗口信息,然后根据窗口的大小、位置等属性进行布局和显示。WindowManagerService 还负责处理窗口的动画、触摸事件和按键事件等操作。
WindowManager 的作用?
WindowManager 是 Android 框架中非常重要的一个服务,其主要作用是管理和调度应用程序窗口。
WindowManager 主要有以下作用:
-
窗口创建和管理:WindowManager 可以创建和管理各种类型的窗口,如 Activity 窗口、对话框窗口、悬浮窗口等。WindowManager 可以为窗口设置透明度、坐标、大小、类型以及相对关系等属性。
-
窗口层级的管理:WindowManager 可以根据窗口类型、属性等对窗口进行层级的管理,保证窗口的叠放顺序正确,不会出现遮挡或屏幕外无法显示的情况。
-
窗口事件的分发:WindowManager 负责窗口事件的分发,如点击事件、触摸事件等,将事件分发给对应的窗口进行处理。
-
外部应用程序的窗口管理:WindowManager 可以管理外部应用程序的窗口,使得多个应用程序之间的窗口可以正确地显示和交互。
-
窗口样式的控制:WindowManager 可以控制窗口的显示样式和动画效果,如窗口进入动画和退出动画等。
总的来说,WindowManager 在 Android 系统中扮演的角色至关重要,它负责窗口的管理和事件分发,保证应用程序的窗口可以正确地显示、响应和交互,也为应用程序开发者提供了丰富的窗口样式和效果控制的方式。
WindowManagerGlobal
WindowManagerGlobal是Android中用于管理窗口的一个类。它是WindowManagerService的代理,同时也是ActivityManagerService的客户端。可以理解为是一个全局的窗口管理器,其功能包括创建和管理窗口,获得窗口的位置和尺寸,处理面向应用程序的View布局等。
WindowManagerGlobal主要提供了以下功能:
- 创建和添加窗口
- 移除和更新窗口
- 获取窗口相关的信息,例如尺寸、位置等
- 获取窗口所属的某个View
- 处理窗口的事件分发
- 获取默认的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:非公开应用需要用户手动打开“允许安装来自未知来源的应用”选项才能安装,这可以在系统设置的“安全”选项中进行设置。再次安装应用时,系统会提示用户是否允许非公开应用的安装,并让用户选择是否启用“未知来源”的应用进行安装。