确实经历了比较艰难的时候。还是希望总结一些东西。下面都是一些常见知识点,建议熟练掌握
- View 绘制:
-
- 自定义view ,wrap_content 支持, padding 支持, 自定义属性支持
- ⭐️Android View的绘制流程
- Android 面试官:简述一下 View 的绘制流程,这个都答不出来就别想拿Offer
- Android绘制流程 —— View、Window、SurfaceFlinger - 掘金
- ❌Android 图形架构 之二—— SurfaceFlinger 启动和连接
- TextView text 居中
- Android View 的绘制流程分析及其源码调用追踪
- 一篇文章看明白 Activity 与 Window 与 View 之间的关系
- 换肤:
- Android图形系统(三)-View绘制流程
- View 事件传递
-
- requestLayout和invalidate区别:
-
- requestLayout:递归到ViewRootImpl-> peformTraversals 会导致onMeasure和onLayout被调用,不一定会触发OnDraw
- invalidate: 递归调用父view的invalidateChildInParent,直到ViewRootImpl的invalidateChildInParent。不会导致onMeasure和onLayout被调用,而OnDraw会被调用
- Parent 如何拦截子View 事件:重写父view的onInterceptTouchEvent
- 最全面讲解事件分发:
- ⭐️图解Android View的事件传递(非常好的文章) :www.jianshu.com/p/bea1bb4aa… (一大一小touch 事件传递)
-
- 如果child 设定了listener,那么在中途move 被parent 拦截之后,会收到cancel,后续的事件将通过parent传,并且parent也不会合成click事件
- Android中ACTION_CANCEL的触发机制与滑出子view的情况:www.jb51.net/article/222…
- ⭐️层级过深对性能影响:blog.csdn.net/Androiddddd…
- 浅谈 View 的 OnTouchEvent 和 OnTouchListener 的区别
- ****runOnUiThread 、Handler.post、View.post分析
- ❌Onclick 详解
- Android 系统,Framework学习(三)之PMS、AMS、WMS
-
- Android系统启动流程
- 一篇文章看明白 Android 从点击应用图标到界面显示的过程
- ****ActivityThread的理解和APP的启动过程
- Android解析ActivityManagerService(一)AMS启动流程和AMS家族
- ❌Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
- ❌Android WMS(一)-窗口管理
- ❌pms:一篇文章看明白 Android PackageManagerService 工作流程
-
- ❌APK 安装流程:www.jianshu.com/p/f47e45602…
- ❌window和SurfaceFlinger建立连接分析
- Activity/fragment 相关
-
- Android开发 Activity生命周期详解
- ⭐️Android 应用程序的启动流程,桌面点击
- startActivity启动过程分析:
- Android Activity横竖屏切换生命周期
- 启动模式 & 应用场景
- Activity四种启动模式区别与适用场景、两种启动模式设置方式区别
- onResume View显示过程:
- Android之Application和Activity的Context区别 ****Activity Context 对比 Application Context
- Acticity之setContentView()详解
- Fragment
-
- Activity 与 Fragment 通信方式总结 ,Handler,广播,EventBus,接口回调,setArguments
- Android中Activity和Fragment传递数据的两种方式
- Android Fragment 使用解析****
- Android-0.Fragment基础示例
- Fragment生命周期
- Service 相关:
-
- IntentService源码分析,service中单开一个线程执行任务,避免ANR
- ⭐️BindService 详解
- Binder Java层实现(一):IBinder/IInterface/Binder/Stub
- ****一篇文章看明白 Android Service 启动过程
- Broadcast receiver, 深入理解Android之 BroadcastReceiver
- Content provider , 深入理解Android 之 ContentProvider
- 设计模式,全集:refactoringguru.cn/design-patt…
-
- 观察者 代码实践 blog.csdn.net/leilifengxi…
- 单例,注意线程安全:volatile & double check
- 代理:静态 & 动态:www.liaoxuefeng.com/wiki/125259…
-
- Java动态代理——框架中的应用场景和基本原理,主要是AOP
- 线程&线程池&多线程
-
- New thread 创建过程
- 线程状态图:blog.51cto.com/u_15127622/…
- Android线程池ThreadPool基本使用
- ****手写线程池,对照学习ThreadPoolExecutor线程池实现原理!
- 线程池 实现原理 www.jianshu.com/p/b9e26871a…
- 单个线程开销:1M blog.csdn.net/Dontla/arti…
- 优先级设定:PriorityBlockingQueue
- Java中sleep和wait的区别 ,
- 线程Thread.yield: https://blog.csdn.net/y532798113/article/details/103997066
- 线程状态,Linux:https://www.cnblogs.com/klb561/p/11945157.html
- JAVA并发编程:volatile关键字
- 线程同步, Android 多线程 线程同步
-
- 悲观锁 synchronized
- 谈谈synchronized与ReentrantLock的区别?
- ****ReentrantLock
- 乐观锁 CAS
- Binder
-
- Android深入浅出之Binder机制
-
- 享受更多的资源,每个app的内存是有限的,多进程就让内存变大了。
- 主进程的安全隔离。一个进程崩了,主app不会崩。
- 进程保活几率提升,一个被杀了相互拉。
- Binder机制的原理、使用、源码
- 全面剖析Binder跨进程通信原理:
- 数据传输限制:www.jianshu.com/p/ea4fc6aef…
- Oneway(异步)& 阻塞模式 blog.csdn.net/Jason_Lee15…
- max: 4M/2 4M, 一般情况 (1M-8K)/2; oneway: 1m-8k
- 彻底理解Android Binder通信架构
- ❌Vsync 是怎么回事
-
- cpu & surfaceflinger www.jianshu.com/p/a5632f962…
- ❌性能优化 ,Android 性能优化必知必会
-
- 原因:
-
- 系统层面:SurfaceFlinger 主线程耗时,后台活动进程太多导致系统繁忙,主线程调度不到 , 处于 Runnable 状态,System 锁,Layer过多导致 SurfaceFlinger Layer Compute 耗时
- 应用层面:主线程执行时间长 主线程执行 Input \ Animation \ Measure \ Layout \ Draw \ decodeBitmap 等操作超时都会导致卡顿;主线程 Binder 耗时;WebView 性能不足;
- 内存泄露 的知识都在这里了!
-
- Heap Viewer
- Android Studio 的 Memory Monitor
- LeakCanary
- Android内存溢出/泄漏常见案例分析及优化方案最佳实践总结
- 检测,(卡顿检测以及优化):
-
- 被动集成检测方案:卡顿,内存泄露:
-
- Choreographer doFrame
- Handler 消息处理增加日志:setMessageLogging , 方案研究handlemessage Printer对象
- 【开发中使用】 Leakcanary 内存泄露,www.jianshu.com/p/b857736d1…
- BlockCanary
- ****Android卡顿监控方案,包含监控,上报,提单,定期打印回溯堆栈
- 主动:
-
- 高速摄像头&人工盲测
- adb shell dumpsys gfxinfo =》 Janky frames
- Android studio中使用systrace, traceview
- LayoutInspect 检查布局层次
- Android App性能评测分析-启动时间篇
- StrictMode
- 解决:
-
- 启动时间,application 和 main activity 流程监控:www.jianshu.com/p/fe81e4b4c…
- UI布局优化:减少过度绘制,局部刷新,自定义view,列表优化,绘制优化
- 减少主线程耗时操作,多线程
- 异步初始化
- 懒加载
- 缓存
- 抖音低版本上BoostMultiDex juejin.cn/post/684490…
- 闪屏页/广告页
- 深入探索Android启动速度优: juejin.cn/post/684490…
- apk&启动速度&稳定性&内存&操作流畅度:juejin.cn/post/695060…
-
- Native crash 抓取:www.cnblogs.com/mingfeng002…
- GC机制:www.jianshu.com/p/7759c6f21…
- ❌相同的图片放在不同的path 内存:blog.csdn.net/smileiam/ar…
- ANR 详解,system_server 监控:www.jianshu.com/p/4da2ca7fe…
- android 系统、编译
-
- 如何选择complieSdkVersion,minSdkVersion和targetSdkVersion
- ❌ 今日头条 Android '秒' 级编译速度优化
-
- AAR
- 增量编译
- maven 仓库地址
- transform 优化
- ****Android Apk文件包含的内容,资源文件,配置文件,dex文件等
- ****探究 Android 签名机制和原理,MAINFEST.MF,CERT.SF, CERT.RSA
- Recyclerview
-
- 缓存原理 zhuanlan.zhihu.com/p/80475040
- 详解:www.jianshu.com/p/3e9aa4bda…
-
- scrap: 通过 position 标识
- cache:通过 position 标识
- 【慎用】 mViewCacheExtension:通过position, type
- RecycledViewPool:通过 type
- ListView和RecyclerView的区别
- handler && looper
-
- 常见面试题:www.jianshu.com/p/784933f61…
- 同步屏障:www.jianshu.com/p/2fb96d4e0…
- 阻塞机制实现:nativePollOnce(ptr, nextPollTimeoutMillis); blog.csdn.net/qq_33490704…
- 阻塞&唤醒:www.it610.com/article/140…
- 生产者消费者模型在handler中的落地:
- Handler的sendMessage和post的区别
- String 是可变吗?为什么
- ❌sharedpreference??
- Array 数据结构 ArrayList , SparseArray
-
- ArrayList:https://www.jianshu.com/p/ea655eba6…
- SparseArray: blog.csdn.net/li132516902…
- Map数据结构:HashMap & ConcurrentHashmap & HashSet & ArrayMap
-
- SparseArray、ArrayMap、HashMap 之间的比较
- ****HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你
- ConcurrentHashmap
-
- 大概文档:www.jianshu.com/p/43b85dec6…
- 图解文档:blog.csdn.net/zzu_seu/art…
- 与hashtable 相比,哪个效率更高? blog.csdn.net/fd2025/arti…
- 实现方案:blog.csdn.net/QQ114964629…
- HashMap
-
- HashMap 基于 JDK 1.7 源码解析
- Java 8系列之重新认识HashMap
- load factor 0.99 zhuanlan.zhihu.com/p/103449454 www.jianshu.com/p/effb601f2…
- 如何简单改写达到线程安全:Collections.synchronizedMap
- 解决hash冲突:开放地址、链式地址、再hash:解决哈希冲突的常用方法分析
- ArrayMap blog.csdn.net/qq_31481093…
-
- 提高了空间利用率
- LinkedHashMap https://www.jianshu.com/p/8f4f58b4b8a
- HashSet
-
- 实现方案:内部就是一个Hashmap,然后value是常量 Object();
- 简单的同步方案: Collections.synchronizedXXXX
- List:线程安全Vector
- Android面试 HashMap算法
- HashMap面试题及答案(2022版
- ****hashmap面试:夺命14问
- 深入理解 hashcode() 和 HashMap 中的hash 算法
- Sdk 设计规范 SDK 开发规范 - 腾讯云开发者社区-腾讯云
- mvc mvp mvvm 区别,实现机制
-
- ⭐️ [译] MVC,MVP,MVVM 对比
- 对比:
-
- Mvc:view 内业务逻辑复杂;
- Mvp:劣势:presenter 接口过多,持有mv的引用;优势:解耦VM,单独测试view,presenter与view实现无关
- mvvm,出现bug的话排查麻烦,解耦的view 和model
- 一文说透 Android 应用架构 MVC、MVP、MVVM 和 组件化
- MVC、MVP、MVVM模式的概念与区别
- JVM www.cnblogs.com/andy-songwe…
-
- Jvm,Dalvik和Art区别
- 详解Java垃圾回收机制
- JVM的4种垃圾回收算法、垃圾回收机制与总结
- ❌深入详解JVM内存模型与JVM参数详细配置:
- ❌JVM性能调优的6大步骤,及关键调优参数详解
- JVM类加载机制: www.jianshu.com/p/7e9c8992c…
- 单个进程内存大小192M, largeHeap 生效之后是512M,可以通过/system/build.prop 配置变化.heapgrowthlimit 默认值,启动largeHeap之后使用heapsize
- JVM系列(一):深入详解JVM 内存区域总结
- JVM系列(二):深入讲解JVM内存溢出分析!
- JVM 系列
- Android 内存 - 垃圾回收(GC)机制
- 输入法框架:codeantenna.com/a/JgUKFxdQc…
- 组件化,插件化。组建化有几种实现方案,对比一下。
-
- Android插件化原理(一):插件类的加载 www.jianshu.com/p/54f2aa39f…
- Android插件化原理(二):Activity的插件化:www.jianshu.com/p/e52d9e1cb…
- Android插件化原理(三):Service的插件化:www.jianshu.com/p/b54b02d67…
- 【Android 插件化】“ 插桩式 “ 插件化框架:blog.csdn.net/shulianghan…
- Droid组件化方案设计:https://lrh1993.gitbooks.io/android_int…
- 使用APT 详解,实现EasyRouter:
- 组建化有几种实现方案,对比一下:1)模块拆分,单工程;2)模块拆分,多工程;3)apk拆分,多工程
- 热修复技术
-
- 简单的dex替换,更新PathClassLoader:blog.csdn.net/qq_39799899…
- Alibaba AndFix: blog.csdn.net/m0_46204016…
- Java语言进阶
-
- JVM中的四种引用类型
- 内存模型:new Object,过程。类加载过程?
-
- 扩展一下:单个对象大小。java 内存模型:www.cnblogs.com/rickiyang/p…
- 关于泛型的应用:List a = new ArrayList<>(); 这个a.getClass () 是什么,另外怎么能拿到String
-
- 通过匿名内部类,new ArrayList(){}; getGenericSuperclass -> getActualTypeArguments
- Gson.fromJson(infoString, new ArrayList().getType()) 为什么要写成这样
-
- fromJson使用TypeAdapter是为了减少反射的使用,增加效率: https://juejin.cn/post/7018189031519289381
- 示例:
-
- String jsonArray = "["Android","Java","PHP"]";
- String[] strings = gson.fromJson(jsonArray, String[].class);
- 排查2,原因是泛型擦除,List list = gson.fromJson(jsonArray, new TypeToken<List>() {}.getType());
- 标准答案: https://www.cnblogs.com/jpfss/p/9952354.html
- 泛型的擦除:blog.csdn.net/qq_41701956…
- JAVA 抽象类(Abstract Class) 和 接口(Interface) 的区别
- ****Kotlin 和 Java 的区别
-
- Kotlin 与 Java有什么区别 ,变量,扩展函数,隐式转换,协程,静态成员,原始类型
- 【Android】函数插桩(Gradle + ASM)
- 网络编程
- Hashcode & equals : blog.csdn.net/qq_27706119…
- ❌红黑树:www.jianshu.com/p/e136ec792…
- http vs https 区别:www.cnblogs.com/klb561/p/10…
- Android Service进程保活
-
- 双星系统
- 前台服务
- 优先级:可见进程&前台进程&服务进程,利用前台activity和通知:segmentfault.com/a/119000000…
- 每天定时进行一个任务,谷歌规范是
-
- AlarmManager www.codeleading.com/article/890…
- 多种方式实现 Android 定时任务,哪一款是你的 FEEL : sleep,timer,ScheduledExecutorService,AlarmManager
- native coredump 怎么抓取
-
- java 层:blog.csdn.net/Jason_Lee15…
- native层:juejin.cn/post/684490…
- ❌进程间通信方式,
- 使用Bundle/Intent:只能传递Bundle支持的数据类型
-
- 四大组件:activity,boardcast,service,contentprovider
- 使用文件共享:
-
- 不适合高并发的场景,不能做到即时通讯
- 使用SharedPreferences(废弃)
- 使用Messenger(轻量级的AIDL,无需自己处理很多东西):功能一般,支持一对多串行通信,支持实时通信。
-
- 与AIDL对比,cloud.tencent.com/developer/a…
- 使用AIDL:功能强大,支持一对多并发通信,支持实时通信,需要处理线程同步
-
- 普通AIDL:blog.csdn.net/CrazyMo_/ar…
- 使用ContentProvider:主要用于数据访问,支持一对多的并发数据共享,缺点:受约束,主要针对数据源的增删改查。
- Broadcast,性能差
- Socket:功能强大,通过读写网络传输字节流,支持一对多的并发的实时通讯。
- 管道
-
- 容量下,4K,控制并发:www.jianshu.com/p/115cf0e51…
- 共享内存:进程间共享体积较大的数据,比如bitmap。
-
- 原理&场景:juejin.cn/post/684490…
- 混合编程
- SurfaceView
- 高级组件: juejin.cn/post/688126…
-
- Android OkHttp常用详解
- 深入分析LeakCanary原理
- RxJava****
- ❌jianshu:使用Bugly对Native lib的crash bug进行定位
- AOP 是什么?
-
- 应用场景:
-
- Android API23+的权限控制: 避免到处都是申请权限和处理权限的代码
- 无埋点: 分离业务代码和统计代码
- 安全控制: 比如全局的登录状态流程控制
- 日志记录: 侵入性更低更利于管控的日志系统
- 事件防抖: 防止View被连续点击触发多次事件
- 性能统计,事务处理、异常处理、缓存、软件破解
- AOP 切入点表达式
- ****AOP在Android开发中的使用
- ****Android开发中的AOP技术
- Android AOP — AspectJ的使用
- 廖雪峰讲解使用AOP
- 实现方案:AspectJ、APT、Javassist、 Transform、HotFix、ASM、 Retrofit
- 太好了!总算有人把动态代理、CGlib、AOP都说清楚了!
- Glide
-
- ****Google推荐——Glide使用详解
- ****探索 Glide 原理
- EventBus Android 主流开源库源码分析(一)- EventBus 源码详解
- ButterKnife Android Studio实战之 ButterKnife 使用
- Dagger2
- ARouter
- Coil
- ****Android中如何Hook住JNI方法
- Gradle transform: Android-Gradle-Transform用法
- MAT 工具使用, android 内存分析工具——MAT使用
- Jetpack
- 算法题
-
- 手写atof
- 绘制一个正弦线(使用path ):www.jianshu.com/p/e38c76de0…
- ❌贝塞尔曲线:juejin.cn/post/690259…
内容都是引用优秀作者的内容,侵权的话,联系我删除~