Android知识点总结
2022-05-07 08:30:51 0 举报
AI智能生成
Android知识点总结
作者其他创作
大纲/内容
Java
JVM
class的加载过程
加载、验证、准备、解析、初始化
双亲委托机制
内存模型
方法区
程序计数
堆
虚拟机栈
本地方法栈
判断对象存活算法
垃圾回收机制
复制算法/标记清除(清楚)算法/分代收集算法等
强软弱虚 引用的使用
多线程/并发
synchronized
使用(普通方法和静态方法)
原理 字节码结构 无锁/轻量/偏向锁/重量锁
volatile
可见性、有序性(禁止指令重排)
不保证原子性
ReentrantLock
CAS:保证修改不中断
自旋:如果不能获得锁,则加入队列并阻塞
LockSupport.park()/unpark()
AbstrackQueueSynchronizer
ThredLocal
并发/线程池概念
常见的四种线程池怎么实现的
ConcurrentHashMap机制
并发:
容器集合
List/Map/Set 的数据结构及自增长实现
HashMap
1.7以前 数组加链表
1.8 以后,当链表的数据大于8时,改为红黑树
loadFactor加载因子 默认0.75,以达到数组利用率相对较佳
threshold threshold = capacity * loadFactor,当Size>=threshold的时候,那么就要考虑对数组的扩增了,也就是说,这个的意思就是 衡量数组是否需要扩增的一个标准
resize 进行扩容,会伴随这一次重新hash分配,并且会遍历hash表中所有的元素,是非常耗时的
设计模式
六大原则
单一职责
接口隔离
里氏代换
迪特米原则
开闭原则
依赖倒置(下层不应该依赖上层模块)
常用设计模式UML图
UML的基本绘制
虚线箭头 关联关系 (方法参数)
实线箭头 依赖关系 (成员变量)
虚线三角 实现
实线三角 继承
23种设计模式
创建型5种:工厂方法、抽象工厂、单例模式、构建者模式、原型模式、这里经常提到简单工厂模式,不属于23种设计模式
结构性7种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型11种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介模式、解释器模式
数据结构/算法
数组
最大的子序列求和
删除排序数组中重复的数字
二维数组查找(思路从左下角开始查找)
用两个栈实现队列
链表
链表的反转
链表的大数加法
求链表环的问题,入口节点位置
链表中倒数第K个节点
树
树的广度/深度遍历
已知中序和(前)后序,构建二叉树
求一颗二叉树的深度
上面的三大数据结构种,蕴含的算法
递归
贪心
回溯
动归
Android
进阶知识点
Gradle Tranform
ASM
Javassist
APT(AnnotationProcessorTool)Java编译时注解处理器
示例:Butterknife生成代码
实现 抽象类AbstractProcessor
PMS/AMS/WMS
Android绘制原理及硬件加速原理
Binder知识及底层实现
Android启动流程、SystemServer启动
Activity启动流程
APK安装流程
WMS和View的事件分发过程
DexClassLoader
插件化
插件化方案
皮肤插件化
热修复
ART和Dalvik区别
Android N优化问题(混合AOT和JIT的问题)
CLASS_ISPREVERIFIED
性能优化
UI优化
布局优化减少层级merge标签
使用一些ViewStub懒加载
子线程复杂UI处理
复用性较高页面 使用Fragment代替 (Activity的管理加载AMS耗时会增多)
插件xml转Java
服用View 建立ViewPool池
网络优化
弱网环境
不自动加载图片
调整网络请求线程
调整定时任务策略
GZIP压缩
Protocol Buffer代替JSON
HTTPS多通道
IP直连
内存优化
内存泄漏:检测工具LeakCanary
图片的优化(无透明通道等)
缓存池/缓存策略的优化
冷启动优化
区分好优先级 子线程加载
MultiDex问题
默认开屏主题、提升用户体验
HotReload热启动、不完全退出APP、moveTaskToBack(true)
WebView优化
预加载
资源预加载
WebView预创建
开启Cache
ANR定位
如何产生
如何定位
如何避免及解决
WorkManager使用(JobScheduler+广播) 自动适配
APK瘦身
resources.ars的优化 AndResGuard
开启混淆/资源压缩/去除无用资源
利用Transform删除内敛常量
图片
压缩
.9
xh-dpi
4.2以上 webp
使用一套.so文件
组件化技术
架构的设计
分层模式
拒绝低层依赖高层
合理解耦合
gradle模式的选择
每一个module单独可运行?
全局的一个app_boot
SPI(Service Provider Interface)
路由选择(ARoute)/事件总线选择
Linux/操作系统
epoll机制 线程/进程的阻塞实现
文件系统管理
磁盘系统管理
管道机制
基础知识点
git操作
命令
图形化界面
Android四大组件、生命周期
View
View的绘制基础(继承View绘制各种图形)
View的事件分发
View的动画原理
常见View的解析
RecycleView原理
LinearLayout线性布局常用来水平/垂直摆放childView
RelativeLayout相对布局常用来AView在BView的某个位置,来摆放childView
ConstraintLayout约束布局常用来CView在DView的某个约束位置,很好的解决了布局嵌套层级过深以及布局困难的问题
CoordinatorLayout的特征是什么呢?它的特征为:可以配合每个 childView 来协调使用。比如在移动A View的过程中我想让B View和C View发生改变(例如效果一),那么就可以用它,它的缺点也非常明显,布局起来稍稍优点麻烦...
PopUpWindow
SlidingTabLayout+ViewPager
Glide加载图片
GridView(网格视图)
各种Dialog(BottomSheetDialog等)
选项选择器PickerView(选择时间地点等)
适配
分辨率
今日头条方案
多drawable方案
语言
低版本的适配
Android各版本新特性
第三方库
地图
支付
三方库的源码分析解读:OKhttp家族/Glide/EventBus/LeakCanary
二维码
permissionX(权限)
常见存值方式
hawk
realm
MMKV
常见网络架构
Rxjava+retrofit
Flutter
高性能原理
Dart无锁线性内存分配方式
Dart多生代算法
Dart的编译模式
Dart异步消息处理方式
Flutter 重新绘制 直接居于底层去渲染
Flutter Widget的三棵树
Flutter 单次绘制原则
Flutter Wideget知识
Widget的轻量级 只是用来配置的
Widget
Element
RenderObject
Flutter Widget 有状态和无状态State的设计
InheritedWidget实现原理
本身就是一个ProxyWidget
通过共享,其实在Element的内部的Map_inheritedWidgets
InheritedWidget是Flutter的灵魂设计之一
支持原生控件的于原理
Android上是利用副屏显示的底层逻辑,使用VirtualDisoplay类,创建一个虚拟显示器,需要调用DisplayManager的createVirtualDisplay()方法,将虚拟显示器的内容渲染在一个内存的Surface上,生成一个唯一的textureld。
之后渲染时将texureld传递给Dart层,渲染引擎会根据textureld,获取内存里已渲染数据,绘制到AndroidView上进行显示
错误处理
在runZoned时注册自己的ErrorWidget
然后再runAPP
混合开发
混合栈问题
混合编译打包问题
MethodChannel 基础库支持问题
Kotlin
收藏
0 条评论
下一页