外观
View 与显示链路
布局、绘制、事件、帧调度与图层合成。
本领域共 88 条问答。先读与你当前场景相关的主题,再用全文搜索查找具体问题。
UI 布局与视图绘制原理
- 如何理解请描述 View 的 measure 过程中 SpecMode 的三种类型及其含义?
- 为什么在自定义 View 中重写 onDraw() 时需要调用 invalidate()?
- 如何优化自定义 View 的绘制性能以避免过度绘制?
- ConstraintLayout 相比 RelativeLayout 和 LinearLayout 在性能上有哪些优势?
- 如何使用 ConstraintSet 动态修改约束条件?其底层实现原理是什么?
- 在嵌套大量 ConstraintLayout 时,如何避免布局层级过深导致的性能瓶颈?
- Compose 如何通过重组(Recomposition)机制实现高效 UI 更新?
- 什么是 State Hoisting?它在 Compose 中为何如此重要?
- 如何在 Compose 中实现类似传统 View 的 onMeasure 和 onLayout 自定义逻辑?
- 开发一个可滑动的自定义 ViewGroup 时,如何处理子 View 的触摸事件分发?
- 如何为自定义 View 支持 XML 属性配置并兼容不同屏幕密度?
- 在自定义 View 中,如何正确处理 Accessibility(无障碍)支持?
- ObjectAnimator 和 ValueAnimator 的核心区别是什么?何时选择其中一种?
- 如何实现一个复杂的路径动画(如沿贝塞尔曲线移动)?
- 在 Jetpack Compose 中,如何使用 animateAsState 实现状态驱动的平滑过渡?
多线程与异步编程
组件通信与依赖注入
混合开发与 WebView 交互
- 如何禁用 WebView 的 JavaScript 弹窗和文件访问以提升安全性?
- 如何设置 WebView 的 User-Agent 字段以适配不同网站?
- 什么是 WebChromeClient 和 WebViewClient?它们各自的职责是什么?
- 如何在 WebView 加载完成后通知 Native 层执行特定逻辑?
- 如何清除 WebView 的缓存、Cookie 和历史记录?
- 为什么在 WebView 中登录状态容易丢失?如何保持 Session?
- 如何实现 WebView 的离线缓存(AppCache)功能?
- 在 Flutter 应用中嵌入 WebView 时,如何处理平台通道(Platform Channel)通信?
- React Native 的 WebView 组件与原生 WebView 在性能上有何差异?
- 如何通过预加载 WebView 实例提升页面打开速度?
- 如何监控 WebView 的内存占用并设置合理的上限?
多媒体与相机开发
设备兼容性与多屏适配
TV 与大屏交互设计
内存管理与性能优化
冷启动优化
View 与显示链路
- 一个 View 从创建到显示,完整流程是什么?
- SurfaceView 与 TextureView 有什么区别?
- Activity、Window、DecorView、ViewRootImpl 各负责什么?
- inflate、addView、setContentView 是不是已经把界面画出来了?
- MeasureSpec 三种模式是什么?wrap_content 怎么变成具体尺寸?
- measure 和 layout 的区别?getWidth 与 getMeasuredWidth 呢?
- draw、onDraw、dispatchDraw 各画什么?
- invalidate、requestLayout、postInvalidate 有什么区别?
- VSync 一直有,应用为什么不一直执行 doFrame?
- 主线程、RenderThread、GPU 分别做什么?
- Surface、BufferQueue、GraphicBuffer、Fence 是什么关系?
- doFrame、onDraw、Actual Timeline,哪个时刻才代表上屏?
- 什么时候能拿到 View 宽高?onResume 时已经显示了吗?
- 从手指触屏到 onClick,中间经过哪些环节?
- setSelected、setMargins、findViewById 要在主线程吗?
- translation 动画和修改 margin 动画有什么不同?
- View 性能优化具体优化哪些工作?
- 同步屏障为什么能让绘制相关消息先执行?
- 为什么帧率看起来平稳,操作仍然有延迟?
架构与工程
Android 核心
能力延伸
启动链路与初始化
渲染与跨屏显示
- 如何理解刷新率与帧预算?
- 如何理解Choreographer 与帧调度?
- 如何理解measure、layout、draw 与优化?
- 如何理解主线程之外的慢帧?
- 如何理解BufferQueue、缓冲与 fence?
- 如何理解SurfaceView 与 TextureView?
- 如何理解模糊、透明度与离屏渲染?
- 如何理解输入到显示的时延分解?
Java 并发与实现
语言与组件基础
技术写作与英文术语
绘制与窗口动画
- measure layout draw 和 dispatchDraw 分别负责什么?
- 硬件加速下主线程 RenderThread 和 GPU 分别做什么?
- VSync Choreographer 和 doFrame 是什么关系?
- View 动画 属性动画和窗口动画有什么区别?
输入 Handler 与 View
- 如何理解一次触摸从硬件到 View 经过哪些环节?
- 如何设计一个合格的自定义 View?
- SurfaceView TextureView 和普通 View 的区别是什么?
- 如何理解setSelected setMargins 和 findViewById 必须在主线程吗?
智能硬件 SDK
- View 的 measure layout draw 分别做什么?
- MeasureSpec 三种模式怎么理解?
- invalidate 和 requestLayout 的区别?
- 一个自定义 View 怎样做得正确又流畅?
- 触摸事件是怎样分发的?
- 横向滑动控件放进纵向列表怎样处理冲突?
- 常见 ViewGroup 与 RecyclerView 怎样选择?
- VSync 不停发生 应用为什么不会一直 doFrame?
- ViewModel 到底解决什么问题?
- 如何理解ViewModel 能跨旋转 跨页面 跨进程死亡吗?