当前位置: 首页 > news >正文

Android Framework 常见面试题

以下是常见的 Android Framework 面试题,涵盖基础到高级知识点,帮助准备面试:


一、基础问题

  1. Android 系统架构分层

    • 描述 Android 系统的四层架构(Linux Kernel、Native、Framework、Application)及各层职责。

    • Zygote 进程的作用是什么?它如何启动应用进程?

  2. 四大组件与生命周期

    • Activity 的启动模式(standard、singleTop、singleTask、singleInstance)及应用场景。

    • Service 的两种启动方式(startService 和 bindService)的区别及生命周期。

    • BroadcastReceiver 的注册方式(静态注册 vs 动态注册)及优劣。

  3. Binder 机制

    • 为什么 Android 使用 Binder 而不是传统 IPC(如管道、Socket)?

    • 简述 Binder 的工作原理(驱动层、ServiceManager 等)。

  4. Handler 机制

    • Handler、Looper、MessageQueue 如何协作实现线程间通信?

    • 主线程为什么不会因为 Looper.loop() 而卡死?

   5. 系统启动流程

问题:从电源键到 Launcher 的启动过程。
答案

  1. Bootloader:加载 Linux Kernel。

  2. Kernel:初始化硬件驱动,启动 init 进程。

  3. init 进程:解析 init.rc,启动 Zygote 和 ServiceManager。

  4. Zygote:预加载资源,fork() SystemServer 进程。

  5. SystemServer:启动 AMS、WMS、PMS 等核心服务。

  6. Launcher:SystemServer 启动完成后,启动桌面应用。

6. UI 绘制流程

问题:描述 View 的 Measure、Layout、Draw 流程。
答案

  • Measure:父 View 通过 measure() 调用子 View 的 onMeasure(),根据 MeasureSpec 计算宽高。

  • Layout:父 View 通过 layout() 确定子 View 的位置(left/top/right/bottom)。

  • Draw:通过 draw() 调用 onDraw(),利用 Canvas 和 Paint 绘制内容。

  • 优化:避免在 onDraw() 中创建对象,减少布局层级。

7. 应用启动流程

问题:点击图标到显示 Activity 的流程。
答案

  1. Launcher 通过 Binder 通知 AMS 启动目标 Activity。

  2. AMS 检查目标进程是否存在,若不存在则通过 Zygote fork() 新进程。

  3. 新进程启动后,执行 ActivityThread.main(),创建主线程 Looper。

  4. AMS 通过 Binder 通知新进程的 ApplicationThread 创建 Activity 实例。

  5. Activity 执行 onCreate()onStart()onResume(),通过 WMS 和 SurfaceFlinger 渲染 UI。

8. Handler 机制

问题:Handler、Looper、MessageQueue 如何协作?
答案

  1. Looper.prepare():创建 Looper 和 MessageQueue。

  2. Looper.loop():循环从 MessageQueue 取消息,交给 Handler 处理。

  3. Handler:发送消息(sendMessage())和处理消息(handleMessage())。

主线程为何不卡死

  • 基于 Linux 的 epoll 机制,MessageQueue 空闲时阻塞,有消息时唤醒。

  • ANR 检测通过 InputEvent 和 Broadcast 超时机制触发,与 Looper 无关。

9. Activity 启动模式

问题:解释四种启动模式及应用场景。
答案

  • standard:默认模式,每次启动创建新实例(如普通页面)。

  • singleTop:栈顶复用,避免重复打开同一页面(如通知跳转)。

  • singleTask:栈内复用并清理栈顶之上的 Activity(如 App 主页)。

  • singleInstance:独立任务栈,全局唯一(如系统拨号界面)。

10. Hook 技术

问题:如何拦截 Activity 的启动?
答案

  1. 通过反射获取 AMS 的 Binder 代理对象(IActivityManager)。

  2. 创建动态代理(Proxy.newProxyInstance()),拦截 startActivity() 方法。

  3. 替换系统 AMS 代理为自定义代理,实现逻辑拦截。


二、中级问题

  1. 系统服务(AMS/WMS/PMS)

    • ActivityManagerService (AMS) 的主要职责是什么?

    • WindowManagerService (WMS) 如何管理窗口的层级和显示?

    • PackageManagerService (PMS) 如何管理应用安装与权限?

  2. 应用启动流程

    • 从点击图标到 Activity 显示,描述整个流程(涉及进程、AMS、Binder 等)。

  3. 进程与线程

    • Android 进程间通信(IPC)有哪些方式?Binder 的优势是什么?

    • AsyncTask 的工作原理及潜在问题(内存泄漏、兼容性)。

  4. UI 绘制与事件分发

    • View 的测量(Measure)、布局(Layout)、绘制(Draw)流程。

    • 事件分发机制(onTouchEvent、onInterceptTouchEvent 的执行顺序)。

  5. ANR 与 Crash

    • ANR 发生的条件及如何排查?

    • 如何捕获全局 Crash 并上传日志?


三、高级问题

  1. 性能优化

    • 如何分析并优化 UI 卡顿(掉帧)问题?

    • 内存泄漏的常见场景(Handler、静态变量、匿名内部类)及检测工具(LeakCanary、MAT)。

  2. 系统启动流程

    • 从按下电源键到 Launcher 启动的系统流程(涉及 Bootloader、Kernel、Init、Zygote、SystemServer)。

  3. 自定义 View 与 Framework 扩展

    • 如何实现一个自定义 View?需要注意哪些问题(测量、绘制、触摸反馈)?

    • 如何通过 Hook 技术修改系统行为(如拦截 Activity 启动)?

  4. Jetpack 与 Framework 结合

    • Lifecycle 组件如何利用 Framework 的 Activity/Fragment 生命周期?

    • ViewModel 如何解决配置变更导致的数据销毁问题?

  5. Framework 源码分析

    • 分析一次 startActivity 的源码调用链路。

    • 解释 View.post() 为什么能获取到 View 的宽高?


四、开放性问题

  1. 如何设计一个类似于 Android 的跨进程通信框架?

  2. 如果系统出现“黑屏”或“白屏”,可能由哪些 Framework 层的 Bug 导致?

  3. 如何优化应用冷启动速度(从进程创建到首帧渲染)?


考察重点

  • 原理深度:如 Binder 驱动、Handler 底层实现(epoll 机制)。

  • 系统设计:对 AMS、WMS 等核心服务的理解。

  • 问题解决能力:ANR/OOM 等复杂场景的排查思路。

  • 源码熟悉度:常见类的源码(如 Handler、ActivityThread)。

相关文章:

Android Framework 常见面试题

以下是常见的 Android Framework 面试题,涵盖基础到高级知识点,帮助准备面试: 一、基础问题 Android 系统架构分层 描述 Android 系统的四层架构(Linux Kernel、Native、Framework、Application)及各层职责。 Zygote …...

如何面向DeepSeek编程,打造游戏开发工具集,提升工作效率

最近我在思考: 如何基于DeepSeek,来提升工作效率,构建高效游戏开发工作流。 方向有两个: A: 基于DeepSeek私有代码框架,让它完成项目代码的续写; B: 基于DeepSeek来创作一些工具,使用工具来提升效率,如…...

IDE集成开发环境MyEclipse中安装SVN

打开Myeclipse的help菜单----install from site 点击add弹出对话框 在输入框中输入对应内容 http://subclipse.tigris.org/update_1.10.x 点击OK之后,会刷新出两个选项,需要选中的 点击next,出现许可的时候选中同意,一直结束等…...

QT中使用C++调用 python脚本

1、使用QT Creator 新建项目 2、添加Python解释器 在.pro 文件中添加python头文件与链接库 INCLUDEPATH -I /usr/include/python3.8/ LIBS -L /usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8本文实验为ubuntu自带python3.8,虚拟环境中的python解释…...

C语言学习day25:WinAPI编程进阶07-游戏辅助时钟周期事件、定时器消息

接下来我们说一下时间周期(定时器)事件 我们接下来继续用上一章中的代码来举例 这次课程我们需要用的函数SetTimer()函数和KillTimer()函数 SetTimer() 语法: UINT_PTR SetTimer([in, opti…...

NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署

NVIDIA Jetson Nano的国产替代,基于算能BM1684X的AI算力盒子,支持deepseek边缘部署 另外,还提供BM1684XFPGAAI的解决方案。 核心板基于Sophon SG2300X SoC(也叫BM1684X)打造 带有8核ARM Cortex-A53 2.3GHz&#xff0c…...

解锁STM32外设:开启嵌入式开发新世界

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 探索 STM32 强大的外设家族 初窥门径:STM32 外设开发基础 开发方式与工具 外设配置基础步骤 深入剖析:常见外设应用实例…...

C++的内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int…...

P8685 [蓝桥杯 2019 省 A] 外卖店优先级--优先队列“数组”!!!!!

P8685 [蓝桥杯 2019 省 A] 外卖店优先级 题目 解析优先队列如何判断是否使用优先队列?省略规则优先队列常用操作大顶堆 vs 小顶堆定义队列h队列数组 代码 题目 解析 每个外卖店会在不同的时间点收到订单,我们可以看见测试用例的时间顺序是不同的&#x…...

nuxt2 打包优化使用“compression-webpack-plugin”插件

在使用 Nuxt.js 构建项目时,为了提高性能,通常会考虑对静态资源进行压缩。compression-webpack-plugin 是一个常用的 Webpack 插件,用于在生产环境中对文件进行 Gzip 压缩。这对于减少网络传输时间和提高页面加载速度非常有帮助。下面是如何在…...

RabbitMQ知识点

1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management ​ # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…...

Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...

问题描述 3月6日,在使用Windsuf 时,遇到以下网络连接错误: [unavailable] unavailable: dial tcp 35.223.238.178:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of…...

Spark 3.0核心新特性解析与行业应用展望

Spark 3.0核心新特性解析与行业应用展望 一、自适应查询执行(Adaptive Query Execution, AQE) 作为Spark 3.0最具突破性的优化,AQE通过运行时动态调整执行计划,解决了传统静态优化的局限性。其核心技术突破体现在三方面: 1. 动态分区合并(Dynamically Coalescing Shuf…...

基于 harbor 构建docker私有仓库

仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。 有时候容易把仓库与注册服务器(Registry)混淆。 实际上注册服务器是存放仓库的具体服务器, 一个注册服务器上可以有多个仓库,…...

MySQL基本建表操作

目录 1,创建数据库db_ck 1.1创建表 1.2 查看创建好的表 2,创建表t_hero 2.1 先进入数据库Db_Ck 2.1.1 这里可以看是否进入数据库: 2.2 创建表t_Hero 2.2.1 我们可以先在文本文档里面写好然后粘贴进去,因为直接写的话,错了要重新开始 …...

低空经济快速发展,无人机人才培养及校企实验室共建技术详解

随着低空经济的快速发展,无人机作为该领域的关键技术载体,其应用范围和市场需求正在迅速扩大。为了满足这一趋势,无人机人才的培养以及校企实验室的共建成为了推动技术进步和产业升级的重要途径。以下是对无人机人才培养及校企实验室共建技术…...

电脑网络出现问题!简单的几种方法解除电脑飞行模式

在某些情况下,您可能需要关闭电脑上的飞行模式以便重新连接到 Wi-Fi、蓝牙或其他无线网络。本教程中简鹿办公将指导您如何在 Windows 和 macO S操作系统上解除飞行模式。 一、Windows 系统下解除飞行模式 通过快捷操作中心 步骤一:点击屏幕右下角的通知…...

Docker入门篇1:搜索镜像、拉取镜像、查看本地镜像列表、删除本地镜像

大家好我是木木,在当今快速发展的云计算与云原生时代,容器化技术蓬勃兴起,Docker 作为实现容器化的主流工具之一,为开发者和运维人员带来了极大的便捷 。下面我们一起开始入门第一篇:搜索镜像、拉取镜像、查看本地镜像…...

网络初级复习作业

作业要求: 1,学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到白度网络中的HTTP服务器 2,学校网络内部网段基于192.168.1.0/24划分:PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3,学校内部路由使用静态路由&#xf…...

Spring Boot 调用DeepSeek API的详细教程

目录 前置准备步骤1:创建Spring Boot项目步骤2:配置API参数步骤3:创建请求/响应DTO步骤4:实现API客户端步骤5:创建控制器步骤6:异常处理步骤7:测试验证单元测试示例Postman测试请求 常见问题排查…...

rpc和proto

rpc全称远程过程控制,说白了是一种对信息发送和接收的规则编写方法,来自google,这些规则会以protobuf代码存到proto文件里。我以autoGen中agent_worker.proto为例,大概长这样 syntax "proto3";package agents;option …...

我的两个医学数据分析技术思路

我的两个医学数据分析技术思路 从临床上获得的或者公共数据库数据这种属于观察性研究,是对临床诊疗过程中自然产生的数据进行分析而获得疾病发生发展的规律等研究成果。再细分,可以分为独立危险因素鉴定和预测模型构建两种。 独立危险因素鉴定是一直以…...

GitHub上传项目

总结(有基础的话直接执行这几步,就不需要再往下看了): git init 修改git的config文件:添加:[user]:name你的github用户名 email你注册github的用户名 git branch -m master main git remote add origin 你的URL gi…...

汇编点亮LED

目录 一、ARM常用汇编指令 二、汇编点亮LED 2.1 GPIO简述 2.2 GPIO相关寄存器 2.3 LED原理图 2.4 汇编点亮LED 一、ARM常用汇编指令 常用汇编格式: label : instruction @ comment label:标号 instruction:具体汇编指令 comment:注释内容 常…...

VS Code C++ 开发环境配置

VS Code 是当前非常流行的开发工具. 本文讲述如何配置 VS Code 作为 C开发环境. 本文将按照如下步骤来介绍如何配置 VS Code 作为 C开发环境. 安装编译器安装插件配置工作区 第一个步骤的具体操作会因为系统不同或者方案不同而有不同的选择. 环境要求 首先需要立即 VS Code…...

Python深度学习算法介绍

一、引言 深度学习是机器学习的一个重要分支,它通过构建多层神经网络结构,自动从数据中学习特征表示,从而实现对复杂模式的识别和预测。Python作为一门强大的编程语言,凭借其简洁易读的语法和丰富的库支持,成为深度学…...

hadoop集群HDFS读写性能测试

一、写测试命令 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -write -nrFiles 10 -size 10MB二、读测试命令 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-t…...

HTTPS加密原理详解

目录 HTTPS是什么 加密是什么 HTTPS的工作流程 1.使用对称加密 2.引入非对称加密 3.引入证书机制 客户端验证证书真伪的过程 签名的加密流程 整体工作流程 总结 HTTPS是什么 HTTPS协议也是一个应用程协议,是在HTTP的基础上加入了一个加密层,由…...

react基本功

useLayoutEffect useLayoutEffect 用于在浏览器重新绘制屏幕之前同步执行代码。它与 useEffect 相同,但执行时机不同。 主要特点 执行时机:useLayoutEffect 在 DOM 更新完成后同步执行,但在浏览器绘制之前。这使得它可以在浏览器渲染之前读取和修改 DOM,避免视觉上的闪烁…...

计算机视觉|3D 点云处理黑科技:PointNet++ 原理剖析与实战指南

一、引言 在当今数字化与智能化快速发展的时代,3D 点云处理技术在多个前沿领域中发挥着重要作用。特别是在自动驾驶和机器人视觉等领域,这项技术已成为实现智能化的关键支撑。 以自动驾驶为例,车辆需要实时感知周围复杂的环境信息&#xff…...

【VUE2】第三期——样式冲突、组件通信、异步更新、自定义指令、插槽

目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...

WebAssembly技术及应用了解

WebAssembly(Wasm)是一种为Web设计的高效、低级的二进制指令格式,旨在提升Web应用的性能并支持多种编程语言。以下是对其核心概念、优势、应用场景及开发流程的系统介绍: 1. 核心概念 二进制格式:Wasm采用紧凑的二进制…...

工程化与框架系列(26)--前端可视化开发

前端可视化开发 📊 引言 前端可视化是现代Web应用中不可或缺的一部分,它能够以直观的方式展示复杂的数据和信息。本文将深入探讨前端可视化开发的关键技术和最佳实践,包括图表绘制、数据处理、动画效果等方面。 可视化技术概述 前端可视化…...

ESP32的IDF开发学习-WiFi的开启、配置与连接

前言 本章节将实现如何使用ESP32的WiFi功能,尽可能的详细地介绍 简介 ESP32中的wifi支持双工作模式 Station(STA)模式:连接到路由器或其他AP设备,可通过esp_wifi_set_mode(WIFI_MODE_STA)设置。SoftAP模式&#xf…...

2025-3-9 一周总结

目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...

【网络编程】事件选择模型

十、基于I/O模型的网络开发 10.9 事件选择模型 10.0.1 基本概念 事件选择(WSAEventSelect) 模型是另一个有用的异步 I/O 模型。和 WSAAsyncSelect 模 型类似的是,它也允许应用程序在一个或多个套接字上接收以事件为基础的网络事件通知,最 主要的差别在…...

Java核心语法:从变量到控制流

一、变量与数据类型(对比Python/C特性) 1. 变量声明三要素 // Java(强类型语言,需显式声明类型) int age 25; String name "CSDN"; // Python(动态类型) age 25 name …...

信息安全与网络安全的区别_信息安全与网络安全之差异探析

在当今数字化时代,信息安全与网络安全成为了人们关注的热点话题。尽管这两个概念经常被提及,但它们之间存在着明显的区别。本文旨在探讨信息安全与网络安全的定义、范畴及应对策略,以帮助读者更好地理解和应对相关挑战。 一、定义与范畴的差…...

http协议的三次握手机制

HTTP协议是基于TCP协议的,因此HTTP的三次握手机制实际上就是TCP的三次握手机制。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保通信的可靠性,TCP在建立连接时需要进行三次握手。下面我们详细…...

探秘沃尔什-哈达玛变换(WHT)原理

沃尔什-哈达玛变换(WHT)起源 起源与命名(20世纪早期) 数学基础:该变换的理论基础由法国数学家雅克哈达玛(Jacques Hadamard)在1893年提出,其核心是哈达玛矩阵的构造。扩展与命名&…...

C++ Windows下屏幕截图

屏幕截图核心代码(如果要求高帧率,请使用DxGI): // RGB到YUV的转换公式 #define RGB_TO_Y(r, g, b) ((int)((0.299 * (r)) (0.587 * (g)) (0.114 * (b)))) #define RGB_TO_U(r, g, b) ((int)((-0.169 * (r)) - (0.331 * (g)) …...

【python爬虫】酷狗音乐爬取练习

注意:本次爬取的音乐仅有1分钟试听,仅作学习爬虫的原理,完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌,在请求里发现一段mp3文件,复制网址,确实是我们需要的url。 复制音频的…...

电路的一些设计经验

这个C37在这里位于AMS1117-3.3稳压器的输入端。这个是作为输入滤波电容,有助于平滑输入电压,减少输入电压的纹波和噪声,从而提高稳压器LDO的稳定性。 电容器储存电荷,当输入电压出现小的拨动或者纹波时,电容器可以释放…...

Windows编译环境搭建(MSYS2\MinGW\cmake)

我的音视频/流媒体开源项目(github) 一、基础环境搭建 1.1 MSYS2\MinGW 参考:1. 基于MSYS2的Mingw-w64 GCC搭建Windows下C开发环境_msys2使用mingw64编译 在Widndows系统上,使用gcc工具链(g)进行C程序开发?可以的&a…...

Vue 框架深度解析:源码分析与实现原理详解

文章目录 一、Vue 核心架构设计1.1 整体架构流程图1.2 模块职责划分 二、响应式系统源码解析2.1 核心类关系图2.2 核心源码分析2.2.1 数据劫持实现2.2.2 依赖收集过程 三、虚拟DOM与Diff算法实现3.1 Diff算法流程图3.2 核心Diff源码 四、模板编译全流程剖析4.1 编译流程图4.2 编…...

前端 | CORS 跨域问题解决

问题:Access to fetch at http://localhost:3000/save from origin http://localhost:5174 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the request…...

《白帽子讲 Web 安全》之文件操作安全

目录 引言 (一)文件上传与下载漏洞概述 1.文件上传的常见安全隐患 1.1前端校验的脆弱性与服务端脚本执行危机在文件上传流程中,部分开发者可能会在前端使用 JavaScript 代码对文件后缀名进行简单校验,试图以此阻止非法文件上传…...

【AI】AI开源IDE:CLine源码分析报告

1. 源码位置: CLine 是一个开源的 VSCode 插件,其完整源码托管在 GitHub 的 cline/cline 仓库中。这个仓库包含 CLine 的核心逻辑(TypeScript 编写),包括与 LLM 的对话控制、工具调用接口,以及 VSCode 插件…...

使用数据库和缓存的时候,是如何解决数据不一致的问题的?

1.缓存更新策略 1.1. 缓存旁路模式(Cache Aside) 在应用里负责管理缓存,读取时先查缓存,如果命中了则返回缓存,如果未命中就查询数据库,然后返回缓存,返回缓存的同时把数据给写入缓存中。更新…...

docker compose 以redis为例

常见docker compose 命令 》》注意这个是旧版本的,新版本 docker 与compose 之间没有 - 新版本的 docker compose 把 version 取消了 ,redis 默认是没有配置文件的 ,nginx,mysql 默认是有的 services:redis:image: redis:lat…...