编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 测试经验
  • 职场提升
  • 技术模版

Android问题汇总

目录介绍

  • 01.内存相关问题汇总
  • 02.崩溃相关问题汇总
  • 03.网络相关问题汇总
  • 04.ANR相关问题汇总
  • 05.卡顿相关问题汇总
  • 06.稳定性相关的问题
  • 07.App启动流程优化
  • 08.主流库问题大汇总
  • 09.so库崩溃问题汇总
  • 10.项目设计问题汇总

01.内存相关问题汇总

  • 四种引用:说一下四中引用的区别和使用场景,什么情况下会导致应用内存空间不足?弱引用和软引用有什么区别?
  • OOM:OOM是什么?有哪些场景会造成OOM,如何解决?那么Oom是否可以try catch?为什么?如何治理OOM?
  • 引用链路:activity有个内部类handler,描述下引用关系链路,并说明为何gcRoots能访问到activity
  • 鲁班压缩:图片压缩一般怎么做的?如何理解质量压缩?如何理解采样率压缩,采样率怎么计算?鲁班有哪些设计巧妙的地方?

02.崩溃相关问题汇总

  • 崩溃流程:App发生了崩溃,说一下崩溃处理流程。系统如何统一处理App崩溃?App崩溃后如何处理信息写入文件?
  • 崩溃原理:App崩溃后如何杀死进程?杀死进程的流程是什么,说一下Binder死亡通知的原理?如何避免进程崩溃?
  • 崩溃治理:平常怎么做崩溃治理?如何解决系统级别Crash?如何解决三方库中的Crash呢?Crash预防做过什么措施?

03.网络相关问题汇总

  • 服务端:服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达?
  • Https请求慢的解决办法(提示:DNS,携带数据,直接访问IP)
  • 弱网模拟:如何模拟弱网操作,其设计思路是什么?如何模拟重定向或服务端异常?
  • 耗时统计:对网络请求如何做耗时统计?其设计思路是什么?假设有10个请求,如何保证接口耗时数据是与请求接口对应对?
  • 案例分析:现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的5层都可以涉及)。

04.ANR相关问题汇总

  • ANR基础:究竟是什么是ANR?ANR产生条件是什么?说一下触发场景Activity的ANR流程?那些极端情况不会ANR?
  • ANR监控:ANR是如何监控,其设计思路是什么?FileObserver和WatchDog监听ANR分别有什么特点?
  • ANR查看:ANR是如何查看?trace.txt如何看?提取ANR中那些重要的信息?
  • ANR解决:造成ANR的原因可能有哪些?碰到过哪一种ANR,具体是怎么解决的?

05.卡顿相关问题汇总

  • 卡顿如何解决?UI卡顿的原因有哪些?如何优化?
  • Bitmap 使用需要注意哪些问题?Bitmap.recycle() 会立即回收么?什么时候会回收?如果没有地方使用这个 Bitmap,为什么垃圾回收不会直接回收它?
  • 性能优化;ConstraintLayout为什么效果好?为什么多了层级,性能可能会差很多?

06.稳定性相关的问题

  • 你们做了哪些稳定性方面的优化?性能稳定性是怎么做的?项目中是如何保障业务稳定性的,针对异常问题如何止损?

07.App启动流程优化

  • 启动优化做了哪些工作?是怎么保障优化效果的?在版本迭代中如何避免不断添加代码导致启动变慢的问题?
  • 异步加载为何要这样做?可以用子线程或者线程池

08.主流库问题大汇总

  • Retrofit:采用动态代理,那么什么是动态代理,有何特点?Retrofit如何加载API接口,其核心原理是什么?
  • Glide:它怎么实现图片的加载进度条,Glide的缓存是怎么设计的?为什么要用弱引用。Glide 的源码设计哪里很微妙?说一下三级缓存的原理?描述一下内存缓存的容器?
  • MMKV库:mmkv了解吗?它是如何存储数据的,mmap为什么比io高效,如何避免线程安全,为何进程杀死后仍然能保存好数据,是怎么做到的?如何保证多进程写入安全?
  • OkHttp:官方为什么会把 HttpClient 和 HttpUrlConnection 替换为 OkHttp 默认实现?它有什么好处?
  • OkHttp设计:OkHttp整体设计思路是什么样的?request和respond分别如何设计?如何设计call请求操作?
  • OkHttp同步异步:如何设计同步和异步请求?同步操作做了什么?异步操作如何处理逻辑?
  • OkHttp拦截器:拦截器是如何设计的?为什么需要拦截器?拦截器如何处理拦截,和向下分发逻辑?网络如何做重试机制的设计?
  • OkHttp缓存:如何设计缓存?什么情况下会用到网络缓存?缓存拦截器的核心思想是什么?
  • OkHttp分发器:同步和异步请求的Dispatcher是如何调度的?设计的巧妙之处是什么?
  • OkHttp线程池:使用了什么线程池?是如何管理线程任务?跟普通线程池使用有何区别?
  • LeakCanary:LeakCanary 的核心工作流程,它的设计思想是什么?初始化做了那些工作?如何设计组件的监听(怎么监听ViewModel,Service销毁事件)?
  • LeakCanary:如何判断内存的泄漏?内存泄漏的判定条件是什么 ?检测内存泄漏的机制原理是什么?发现泄漏对象后就会触发分析吗?
  • LeakCanary:检测出内存泄漏后,它又是如何生成泄漏信息的? 内存泄漏的输出轨迹是怎么得到的?为什么不能用到线上环境?

09.so库崩溃问题汇总

  • so奔溃如何解决?

10.项目设计问题汇总

  • LRUCache
贡献者: yangchong211