兄弟们时刻保持离职后能找到工作的能力。 爱生活,爱自己,热爱自由,时刻准备面试。
pie title 干货含量
"干货" : 100
- RquestManager->
- RequestFragmentManager->
- fragmentGet ()->
- fragmentManager->
- fragment.getChildManager
setRetainInstance属性 Fragment保存不会重建如何保存状态里面
- onSaveInstanceState保存Allstate ->
- mActive这个ArrayList集合,里面存放的是添加到FragmentManager中的Fragment找到f.mRetainInstance为true
- oncareate NonConfigurationInstances
- restoreAllState if (nonConfig != null) { Fragment f = nonConfig.get(i);}
ViewModel怎么实现自动处理生命周期?为什么在旋转屏幕后不会丢失状态? 为什么ViewModel可以跟随Activity/Fragment的生命周期而又不会造成内存泄漏呢?
- 实现lifecycleOwner接口,onRetainNonConfigurationinstall
- 保存ViewModeStore 是一个HashMap 重建找到getLastNonConfigurationInstance()
- holdeFragment
- SystemServer
- inputManag
- inputManagerService
- pip
- inputevent motaonEvent
- Activity hadleResumeActivity windowManager addView DecorView viewRootIml inputChannl inputManagerReceive 责任链 ViewPoststate
- 分发到View事件流程
- inputReader inputdispath eventHub epoll机制阻塞 io通知来启动
- inboundqueue outboundqueue waitQuen
- startService 埋雷模式 ams启动startservice startRealService 通过handler post startSerice app回调取消掉handler
- activity与inputmanagerservie通过socket来建立通信
- systemapp 日历 相机
- java api activity location package window
- c++ webkit opengles media art davukj jit
- hal 硬件接口层 audio blueooth
- linux层 binder audio bluetooth
- system/core/init/init.cpp 孵化用户守护进程 开机动画 zygote进程 meidia server 系统服务进程
- zygote 创建系统服务端 加载虚拟机 fork systemServer 应用进程launcher 启动app
- zygote fork出system server进程使用sockete 内存拷贝 socket 单线程线程死锁 关闭socket 创建binder线程池
- system server 启动了 loop 上下文 服务类 加载动态库
- 引导服务 ams pms light
- 核心服务 用户使用时间长短 webview更新服务 管理电池
- 其他服务 电话管理 wms 输入inputManager
- ams 四大组件启动调度切换
- pms apk安装解析
- wms 窗口启动添加删除
Activity启动流程ActivityManagerService 创建了那些类
- Ams通过内部类lifecycle创建 在onstatr中启动,初始化上下文 MainLooper 电池服务 注册到servieManager中
- activity启动到instrumentation.execstartActivity中 通过binder找到 ServiceManager中注册的Ams
- ActivityStarter中的方法 activityRecord信息 ->startActivityUnchecked 中 taskRecord 比较启动模式FLAG_ACTIVITY_NEW_TASK
- 是否创建一个新的栈 最后走到 startProcessLocked zygote通信 fork进程创建
- Serializable 大量创建变量 反射 序列化二进制写入文件 但是有缓存速度会快 serialVersionUID 判断是否一直
- Parcelable 层也是用到了Binder ,也就是将数据写到内核的共享内存中,然后其他进程可以从共享内存中进行读取。
- 内存数据传输 Parcelable
- 数据持久化 Serializable 缓存HandleTable
- scrapview 预布局deatch 完成后重新加入 ,当前缓存状态不是移除状态且与上次下标相同则复用
- cache 屏幕划出 大小为2 setCacheSize
- viewCacheExtension 自定义缓存
- RecyclerViewPool 默认数量为2,缓存大小重新创建重新绑定数据 onBindViewHolder
- 帧 所有画面都是一帧一帧行成
- 帧率 fps 每秒多少帧
- 掉帧 开启垂直同步 双缓存机制 vsync framebuffer backbuffer TripleBuffer
- view刷新 invitaive doTraversal 设置标志位 发送同步屏障 执行peformTraversal 移除同步屏障
- 底层发送vsync刷新信号16.6ms,回调FrameDisPlayEventReceiver onVSync方法 发送到主线程 中间通过handler 绘制帧 申请sync信号 延迟信号
待学习
- HandlerThread
- IntentService
- 线程池
- activity启动流程
- binder的进程通信
- java集合数组