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