随便写点技术总结,不知道若干年后会不会有用
androidframwork
service
startService 启动的生命周期 oncreate->onStartCommand->ondestory 必须通过stopSelf() 或 stopService()停止服务
多次启动会多次调用onStartCommand
bindService 启动的生命周期 oncreate->onbind->onunbind-ondestory 执行完成自动停止服务
https://blog.csdn.net/carson_ho/article/details/53160137
https://www.jianshu.com/p/95ec2a23f300
ipc 管道,socket通信,消息队列,binder机制通信(android)
binder,内存映射 ,https://melonwxd.github.io/2017/10/28/android-ipc2/
消息队列 远程service中handler,message,messagequeue,looper
应用如何启动
click调用startActivity(intent)-->通过Binder IPC机制调用activityManagerService
-->调用grantUriPermissionLocked()判断是否有足够的权限调用activity
-->判断ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity
-->bindApplication 发送BIND_APPLICATION到消息队列
-->通过handleBindApplication调用makeApplication加载app的class到内存中
-->调用realstartactivity-->application线程中的sheduleLaunchActivity发送LAUNCH_ACTIVITY消息
通过handleLaunchActivity()来启动activity
应用如何加载资源
Contentxt中有单例ResourcesManager->单例方式或去resResource
resResource初始化 public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)方法
assetsManager会加载资源文件
handler原理
jni通信 c层调用java层是用反射调用的
点击事件分发
oninterceptertouchevent() (viewgroup独有的,onIntercepter返回true,会调用onTouchEvent,如果返回false,执行子view的dispatch事件)
onDispatherTouchEvent() (ondispatch返回true,会调用onIntercepter,返回false调用子viewdispatch事件)
onTouchEvent();
mesure过程
https://juejin.im/post/5ad37c476fb9a028bc2e32af
调getRootMeasureSpec()根据DecorView的Layoutparams和手机屏幕宽高生成DecorView的MeasureSpec
ViewRootImpl.performTraversals()->performMesure()->
然后调用measure调用开始测量
DecorView.measure()->onMeasure():
ps。如果子viewGroup没有重写measure方法,子view不会被测量, 这个viewGroup没有设置具体的宽高的话,(wrapcontent)则viewgroup就显示父容器的宽高
ps。getChildMeasureSpec()主要是通过父容器的MeasureSpec以及子view的宽高共同决定的
jetpack
databind https://juejin.im/post/5b02cf8c6fb9a07aa632146d
lifecycle 26.1.0 AppCompatActivity已经实现,若没有则自定义
livedata https://juejin.im/post/5bfb4d6a6fb9a049df23bc98 https://www.jianshu.com/p/29c715bbf9f0
navigation
paging https://juejin.im/entry/5b0d3b0251882532321468ff
room
viewmodel https://juejin.im/post/5a040585f265da43346f5d57
workmanager
android打包过程
https://juejin.im/entry/58b78d1b61ff4b006cd47e5b
1,aapt打包资源文件,R.java 生成的resources.arsc和res文件、assets文件
2, 处理aidl生成对应的java接口
3,通过javacompile生成对应的class文件
4,通过dex命令把生成class文件和外部的class文件处理生成dex文件
5,通过apkbuilder把资源文件和dex文件打包成apk
6,jarsigner工具,把apk打包签名
7,通过zipalign,进行apk对齐处理
应用项目中使用
glide
okhttp
okio 底层基于okio
OkHttpClient
call
Dispatcher
Interceptor
rxjava
kotlin
websocket
x509trustmanager服务器双向认证
processor原理与优缺点
缺点是不能插入代码,生成代码要在自己应用中调用
内存优化
profile,leakcanary, traceview,blockcanary
java基础
hashmap与linkedhashmap对比 (linkedhashmap继承于hashmap)
hashmap与ConcurrentHashMap,hashtable对比
java中有几种线程池
CachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
FixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
ScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行
SingleThreadExecutor: 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
sparseArray
SparseArray和ArrayMap都用来替换HashMap
适合数据量小,千级以内。过大会降低性能
均使用二分法查找数据
hashmap扩容会占用更多的内存
sparseArray的key为int,ArrayMap的key为对象
抽象类与接口区别 https://www.jianshu.com/p/038f0b356e9a
多态的表现形式 https://blog.csdn.net/lingang1991/article/details/69905944
算法