Q1正确率 44%
App 冷启动怎么优化?
我会按启动阶段拆解:Application初始化阶段减少同步阻塞和反射调用,延迟加载非必要SDK;首屏阶段通过异步inflate、ViewStub懒加载和布局层级优化减少绘制时间;数据阶段合并网络请求并做缓存预取。监控上区分首次安装冷启动和日常冷启动,用systrace和启动器工具量化每一阶段耗时。
解析
考点:启动性能。拆解启动阶段耗时,做任务异步化与懒加载、类预加载、布局优化,用 Trace 量化收益。常见失分:说不出量化手段。
Android、iOS、跨端与性能优化高频题,覆盖客户端一面到三面。
我会按启动阶段拆解:Application初始化阶段减少同步阻塞和反射调用,延迟加载非必要SDK;首屏阶段通过异步inflate、ViewStub懒加载和布局层级优化减少绘制时间;数据阶段合并网络请求并做缓存预取。监控上区分首次安装冷启动和日常冷启动,用systrace和启动器工具量化每一阶段耗时。
考点:启动性能。拆解启动阶段耗时,做任务异步化与懒加载、类预加载、布局优化,用 Trace 量化收益。常见失分:说不出量化手段。
根本原因是内部类持有外部Activity引用,Activity销毁后消息仍在队列中。解决方式包括将Handler改为静态内部类并弱引用Activity,或在Activity销毁时清空消息队列。另外避免使用sendMessageDelayed做长延迟任务,改用Lifecycle感知的组件或WorkManager等更合适的机制。
考点:内存管理。非静态内部类持有 Activity 引用导致泄漏,应使用静态类加弱引用并在销毁时移除消息。常见失分:只回答“置空对象”。