Android面试题——高级开发面试题一

news2024/11/29 10:52:53

一 面试题概述

  1. 请简单的分析一下Android系统启动流程的原理?
  2. App启动状态有哪几种,各自的启动流程是怎么样的?
  3. 当项目中遇到黑白屏问题,你有什么好的解决方案?
  4. 如何查看方法内的耗时时间与方法分析?
  5. 介绍一下AMS加载Applicaton流程?
  6. 启动过程中有那几个问题需要处理?
  7. WMS管理UI的流程对启动优化的意义什么?

二 面试题解答

2.1 请简单的分析一下Android系统启动流程的原理?

过程简化分析:

  • BootLoader:接通电源后,Boot ROM加载BootLoader到RAM
  • Linux kernel:Linux内核负责初始化各种软硬件环境,加载驱动程序,挂载根文件系统等
  • init进程:在init进程中,挂载虚拟文件系统、启动property服务、当然更重要的是包括了启动的各种系统服务:serviceManager、adbd、mediasever、zygote、bootanmation等。
  • zygote进程:zygote进程是Android系统最重要的进程之一。后续Android中的应用进程都是由zygote进程fork出来的。因此,zygote是Android系统所有应用进程的父进程
  • systemServer进程:SystemServer进程,被称为系统服务进程,属于Android framework层的源码实现,通过android studio打开SystemServer.java,能够看到其中声明了大量的android的系统服务
  • launcher的启动:就是laucher程序的启动的入口函数
  • BootAnimation退出:Launcher启动完成之后,开机动画会进行出,这样给用户的体验就是开机后,就直接进入到桌面了

启动架构图:

2.2 App启动状态有哪几种,各自的启动流程是怎么样的?

APP启动状态

  • 冷启动:App进程创建
  • 热启动:Activity已创建,从后台到前台
  • 温启动:App进程存在,但Activity结束

各自启动流程

冷启动

系统不存在App进程(APP首次启动或APP被完全杀死)时启动APP,此时,APP的启动将经历两个阶段:

第一阶段:

  • 加载并启动app;
  • app启动后,第一时间为app显示一个空白的window;
  • 创建app进程

第二阶段:

  • 系统一旦创建了app进程,app进程就要负责做以下的任务:

创建app对象

  • 启动主进程ActivityThread;
  • 创建MainActivity;
  • 渲染视图;
  • 执行onLayout;
  • 执行onDraw
  • 完成第一次绘制后,把mainActivity替换已经展示的BackgroundWindow,即空白window。

热启动

  • 当我们按了Home键或其它情况app被切换到后台,再次启动app的过程。
  • 热启动时,系统将activity带回前台。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作
  • 如果由于内存不足导致对象被回收,则需要在热启动时重建对象,此时与冷启动时将界面显示到手机屏幕上一样。

温启动

温启动包含了冷启动的一些操作,由于app进程依然在,温启动只执行冷启动的第二阶段,这代表着它比热启动有更多的开销。

温启动有很多场景,例如:

  • 用户按连续按返回退出了app,然后重新启动app;
  • 由于系统收回了app的内存,然后重新启动app。

2.3 当项目中遇到黑白屏问题,你有什么好的解决方案?

为什么会有黑白屏

在桌面点击应用图标后,在app进程没有创建的情况下,需要时间创建app进程,初始化资源,以及启动首页Activity的(这里讨论的首页是指AndroidManifest里面标志的启动页),这就意味点击图标不能马上看到启动页。为了不让用户有卡顿的感觉,谷歌有了Preview Window,在启动页没有绘制完成时,会先初始化一个Window,我们通常看到的黑屏或白屏,就是这个预览窗口。

怎么知道是黑屏还是白屏?

查看这个AppTheme,找到name="android:windowBackground"这个属性,查看属性下的内容,就能知道是黑屏还是白屏,这个属性就是设置预览窗口的背景。

如何解决黑白屏

  1. theme下面的android:windowIsTranslucent属性
  2. 启动activity的theme设置启动图片

2.4 如何查看方法内的耗时时间与方法分析?

借助于Android自带的分析工具:

  • Traceview
  • systrace

2.5 介绍一下AMS加载Applicaton流程?

AMS: ActivityManagerService

AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。

ActivityManagerService启动

  • 创建AMS对象
  • 调用ams.setSystemProcess
  • 调用ams.installSystemProviders
  • 调用ams.systemReady

2.6 启动过程中有那几个问题需要处理?

2.7 WMS管理UI的流程对启动优化的意义什么?

WMS窗口管理

三 参考

  • CSDN—Android系统启动流程分析
  • CSDN—App三种启动场景:冷启动、热启动、温启动
  • 简书—启动速度与执行效率优化项目实战(二):启动黑白屏解决
  • 微信公众号—让你的Android应用快速定位耗时方法
  • 简书—详解AMS启动流程
  • 简书—Android之AMS介绍
  • 知乎—Framework之简单上手AMS启动流程
  • 简书—Android App启动优化
  • Android 的窗口管理系统 (View, Canvas, WindowManager)
  • 简书—Android WMS窗口管理
  • 简书—Android WMS窗口管理(二)
  • 简书—Android WMS(一)-窗口管理

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

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

相关文章

英国公派访问学者带家属签证经验分享

英国公派访问学者带家属签证经验分享,下面就随知识人网老师一起来看一看。 一、学历学位证书 英国签证中心要求提供,但留服网上似乎没有提及。 要是带家属,家属属于Academic Dependants签证。首先介绍一个总的说法,也是据网友提…

游戏测试是一个怎样的行业?

游戏测试真的是玩游戏吗? 游戏测试和软件测试又有什么区别呢? 游戏测试是不是没有前景?能从事吗? 很多人都关注这个问题,所以接下来我详细给大家来介绍下游戏测试。 为了让大家更有获得感,所以本文的行…

【关于我接触了Uview的Upload】——单图上传,多图上传,遇到的问题总结、直传阿里云Oss

Uview的Upload组件 前言 有很长一段时间没有更新了,由于工作的繁忙导致没有时间写博客,今天在做到公司特殊场景需要用到上传组件并直传阿里云Oss,这里简单讲讲我在完成前端项目中使用到Uview的Upload遇到的问题以及我是如何解决&#xff0c…

百万企业用户选择的华为云云服务器,你不来了解一下吗?

今天,企业对“云”的需求像水、电、天然气一样普遍,华为云服务器作为新产品迅速占领现有主机市场。但市面上云服务器的种类多不胜数,怎样才能选到适合自己的云服务器呢?在这里,我推荐华为云云服务器,因为它…

力扣hot100——第2天:4寻找两个正序数组的中位数、5最长回文子串、10正则表达式匹配

文章目录1.4寻找两个正序数组的中位数1.1.题目1.2.解答1.2.1.直接法:合并数组再求结果1.2.2.分治:无需合并数组1.2.3.log(n)的解法2.5最长回文子串3.10正则表达式匹配3.1.题目3.2.解答1.4寻找两个正序数组的中位数 参考:力扣题目链接&#x…

压力串级控制装置用于气动马达的高精度调节

摘要:气动马达作为一种将压缩空气的压力能转换为旋转机械能的装置,其运行的关键是要进行驱动气体压力的控制。本文介绍了目前气动马达压力控制装置的技术现状,特别指出了现有技术中使用电空变换器存在的不足,介绍了电空变换器的更…

深入理解java虚拟机:类加载及执行子系统的案例

文章目录1. 概述2. Tomcat:正统的类加载器结构3. OSGi:灵活的类加载器架构4. 字节码生成技术与动态代理的实现5. Retrotranslator:跨越JDK版本1. 概述 在Class文件格式与执行引擎这部分里,用户的程序能直接影响的内容并不太多&am…

Tableau数据分析数据可视化分析平台

Tableau数据分析&数据可视化分析平台​ 本文章内涉及的资源包以及素材均来自于互联网,仅供大家用来交流学习与研究使用,努力提升自己的一篇文章。各类安装包以及素材版权归属原版权方所有,版权争议与本人无关,用户本人下载后不…

Linux用户操作

用户操作 1、切换用户 root登录 切换到普通用户 howard 命令:su howard 再切换到root用户 一个是执行exit命令,二个是执行su root 查看环境变量 命令:env 切换到Howard用户查看 2、查看用户 查看所有用户 命令:cat …

深入理解Linux网络技术内幕(十)——帧的接收

文章目录前言与其他功能交互设备的开启和关闭队列通知内核帧已接收:NAPI和netif_rxNAPI简介NAPI所用之net_device字段net_rx_action和NAPI新旧驱动程序接口操作poll_list设备驱动程序与内核间的旧接口:netif_rx的第一部分netif_rx的初始任务管理队列以及…

2022最新鸽哒IM即时通讯系统源码 带安卓、苹果、PC端(全开源)+部署教程

提示:即时通讯,纯原生开发,各种功能应有尽有 内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 提示:即时通讯,纯原生开发,各种功能应有尽有 鸽哒是一款类似于v的即时…

供应生物素PEG衍生物试剂Biotin-PEG-NHS,NHS-PEG-Biotin,生物素PEG活性酯

1、名称 英文:Biotin-PEG-NHS,NHS-PEG-Biotin 中文:生物素-聚乙二醇-活性酯 2、CAS编号:N/A 3、所属分类:Biotin PEG NHS ester PEG 4、分子量:可定制,活性酯-聚乙二醇2-生物素&#xff0c…

Java RMI 远程代码执行漏洞

0x01 漏洞描述 - Java RMI 远程代码执行漏洞 - Java RMI服务是远程方法调用,是J2SE的一部分,能够让程序员开发出基于JAVA的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它…

SpringBoot项目打印接口请求日志,CommonsRequestLoggingFilter实现方式

文章目录需求背景效果图实现思路其他方案对比优缺点分析具体实现需求背景 线上项目出现bug时,可以通过接口的请求参数来排查定位问题。和业务方battle时,能够回怼他是自己操作的问题。 效果图 实现思路 Spring提供了CommonsRequestLoggingFilter过滤器…

opengl,opengl es,egl,glfw,glew

OpenGL ES之GLFW窗口搭建 - Plato - 博客园概述 本章节主要总结如何使用GLFW来创建Opengl窗口。主要包括如下内容: OpenGl窗口创建介绍 GLFW Window版编译介绍 GLFW简单工程源码介绍 OpenGL窗口创建介绍 能用于Ohttps://www.cnblogs.com/feng-sc/p/5093262.htmlOp…

事务-P26,P27

事务:要么都成功,要么都失败。例子:支付宝交易。 acid原则。 11直接移植10的代码 spring-11-transaction: UserMapper(增加两个接口) package com.Li.mapper;import com.Li.pojo.User;import java.util.…

C# 消息 界面卡顿 界面进程 工作进程

一 消息 消息与消息循环,是所有的GUI开发里共同的概念: 消息Message,有的地方也叫事件; ① 鼠标消息; ② 键盘消息; ③ 绘制事件; ④ 窗口最大化、最小化; 1 消息循环 消息循环,M…

10道不得不会的缓存面试题【缓存】

博主介绍: 🚀自媒体 JavaPub 独立维护人,全网粉丝15w,csdn博客专家、java领域优质创作者,51ctoTOP10博主,知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于 Java、Go 技术领域和副业。🚀 最…

使用Conda

0. Anaconda Prompt 命令提示符 0.1 验证conda是否被安装 conda --version0.2 conda管理环境 可以用命令复制和删除环境 参考. 1. Conda管理包 1.1 常用包管理功能 查找包查看包安装包 查找分为精确查找和模糊查找,如下图所示 卸载包更新包 1.2 conda管理环…

【实习之velocity】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、图示二、应用场景1.Web应用程序:作为为应用程序的视图,显示数据2.源代码生成:Velocity可用于基于模板生成java源代码3.自…