外观
Framework 与系统服务
AMS / ATMS / WMS / PMS / DMS / IMS / Binder。
本领域共 89 条问答。先读与你当前场景相关的主题,再用全文搜索查找具体问题。
内存管理与性能优化
IPC 与 Binder 机制
- Binder 机制是如何实现跨进程数据传输的?其内核层的核心组件有哪些?
- 为什么 Binder 比传统的 Socket 或管道更高效?
- Binder 事务缓冲区(transaction buffer)的默认大小是多少?超出限制会怎样?
- 如何定义一个 AIDL 接口并实现跨进程调用?需要哪些步骤?
- AIDL 中支持哪些数据类型?如何传递自定义 Parcelable 对象?
- 在 AIDL 调用中,如何处理客户端和服务端的异常断开?
- Messenger 相比 AIDL 有哪些优缺点?适用于什么场景?
- 如何使用 Messenger 实现单向和双向通信?
- Messenger 是否支持并发调用?如何保证线程安全?
- ContentProvider 如何实现跨应用数据共享?其 URI 匹配机制是怎样的?
- 如何通过 android:readPermission 和 android:writePermission 控制访问权限?
- 什么是 URI 权限授予(grantUriPermission)?它解决了什么问题?
- Binder 通信中出现死锁的常见原因是什么?如何避免?
- 为什么在 Binder 线程中不应执行耗时操作?
- 如何监控和分析 Binder 调用的性能瓶颈?
疑难定位与质量门禁
Android 核心
View 与显示链路
Framework 与系统服务
- AMS、ATMS、WMS、PMS、IMS,分别管什么?
- system_server 是什么?和系统应用是一回事吗?
- AMS 和 ATMS 有什么区别?Activity、Task、进程是什么关系?
- WMS 到底管什么?它会帮 View 绘制吗?
- PMS 怎样知道装了哪些应用、一个 Intent 能打开谁?
- IMS 怎样把一次触摸送到按钮?WMS 在哪里参与?
- ServiceManager、Binder 和 getSystemService 是什么关系?
- Zygote 是什么?为什么启动应用要经过它?
- ActivityThread、ApplicationThread 和主线程是什么关系?
- 点图标到页面显示,AMS、ATMS、WMS 怎样配合?
Perfetto 与证据推理
渲染与跨屏显示
Framework Binder 与 ANR
典型场景排障
启动与系统服务
- AMS ATMS WMS PMS DMS 和 IMS 分别负责什么?
- 调用 startActivity 返回是否说明目标界面已经显示?
- standard singleTop singleTask singleInstance 有什么区别?
- Task Activity 进程和 Window 的关系是什么?
- Zygote 和 SystemServer 是怎么启动的?
- ActivityThread 为什么叫主线程 Application 和 Provider 在什么时候初始化?
- 如果要新增一个系统服务 应该怎样设计和接入?
- Android 多用户和跨用户调用需要注意什么?
绘制与窗口动画
- Activity Window DecorView ViewRootImpl 和 WMS 是什么关系?
- 一个窗口添加到系统时 addWindow 和 relayoutWindow 分别做什么?
- 一个 Button 从创建到真正显示在屏幕上 完整链路是什么?
- MeasureSpec 和 wrap_content match_parent 是怎么协作的?
- invalidate 和 requestLayout 有什么区别?
- SurfaceFlinger 和 HWC 如何分工?
- Surface SurfaceControl BufferQueue 和 fence 分别是什么?
- doFrame 结束是不是表示这帧已经显示 如何确定首帧?
- Shell Transition RemoteAnimation 和 animation leash 有什么用?
分屏多屏与应用适配
- 分屏 Freeform 和画中画在系统层有什么区别?
- 如何理解如果让两个应用进入分屏 系统侧需要协调哪些内容?
- 多窗口中是否只有一个 Activity 处于 RESUMED 状态?
- 如何把 Activity 启动到指定 Display?
- 任务从一个屏幕迁移到另一个屏幕时需要处理什么?
- 如何理解折叠屏适配应该关注哪些变化?
- 第三方应用不能修改源码时 怎么做布局和折叠屏适配?
Binder 安全与并发
- Binder 的完整调用过程是什么?
- 为什么经常说 Binder 只需要一次数据拷贝?
- AIDL 是怎么工作的 方法一定运行在主线程吗?
- 同步 Binder 和 oneway 的区别是什么?
- 如何处理服务端进程死亡和 Binder 断开?
- Binder 能否传递大数据 Parcelable 和 Serializable 有什么区别?
- Binder.getCallingUid 和 clearCallingIdentity 应该怎么用?
- 普通权限 运行时权限 签名权限和特权权限有什么区别?
输入 Handler 与 View
- dispatchTouchEvent onInterceptTouchEvent 和 onTouchEvent 是什么关系?
- OnTouchListener onTouchEvent 和 onClick 有什么关系?
- 同步屏障和异步消息有什么用?
包 资源 电源 网络和显示管理
- 一个 APK 从安装请求到完成安装经过什么流程?
- 应用升级为什么通常能保留数据 什么情况下会失败?
- 安装失败时 如何判断是签名 版本 ABI 还是包结构问题?
- Android 资源是怎样选中的 RRO 能改变什么?
- PowerManagerService 主要管理什么 WakeLock 会做什么?
- 设备异常耗电 应该怎样定位?
- 如何理解网络请求在应用侧和系统侧分别经过哪些环节?
- 网络切换后请求失败或服务收不到状态 怎样处理?
- DMS 的逻辑 Display 物理显示设备和 SurfaceFlinger 显示有什么关系?
性能优化与故障定位
项目追问 技术攻关和工程交付
- 你的经历如何对应这个 Framework 岗位?
- 跨模块问题 各方都认为不是自己导致的 怎么推进?
- 开发一个 Framework 特性 技术文档应该写什么?
- 修改系统窗口或任务代码后 怎样保证不影响其他场景?