Android Framwork知识学习总结 目录一、Android系统架构二、binder和AIDL原理2.1AIDL通信调用流程2.2Binder与AIDL之间的区别2.3bundle原理三、Android启动流程SystemServer启动过程四、Activity启动流程五、Window5.1绘制5.2Android事件分发机制六、PackageManagerService七、PowerManagerService八、通知显示流程九、Media 相关十、Wi-Fi一、Android系统架构Android系统架构开篇-腾讯云开发者社区-腾讯云二、binder和AIDL原理binder原理2.1AIDL通信调用流程AIDL调用流程2.2Binder与AIDL之间的区别Binder与AIDL间的区别2.3bundle原理bundle原理 Bundle内部是由ArrayMap实现的ArrayMap的内部实现是两个数组一个int数组是存储对象数据对应下标一个对象数组保存key和value内部使用二分法对key进行排序。所以在添加、删除、查找数据的时候都会使用二分法查找只适合于小数据量操作如果在数据量比较大的情况下那么它的性能将退化。HashMap内部则是数组链表结构所以在数据量较少的时候HashMap的Entry Array比ArrayMap占用更多的内存。因为使用Bundle的场景大多数为小数据量通常不会有在两个Activity之间传递10个以上数据的场景。相比之下在这种情况下使用ArrayMap保存数据在操作速度和内存占用上都具有优势因此使用Bundle来传递数据可以保证更快的速度和更少的内存占用。Android中如果使用Intent来携带数据的话需要数据是基本类型或者是可序列化类型HashMap使用Serializable进行序列化而Bundle则是使用Parcelable进行序列化。在Android平台中更推荐使用Parcelable实现序列化虽然写法复杂但是开销更小所以为了更加快速的进行数据的序列化和反序列化系统封装了Bundle类方便我们进行数据的传输。三、Android启动流程recovery升级模式启动recovery分区内核和文件系统正常启动模式引导内核和启动Android系统启动电源以及系统启动加载引导程序Bootloader到RAMBootloader:主要启动系统OSLinux Kenel:启动内核设置缓存、被保护存储器、计划列表加载驱动查找init文件启动init进程init进程启动: init进程PID是1父进程为linux系统内核的0号进程;初始化和启动属性服务并且启动Zygote进程Zygote进程启动: 创建DVM虚拟机并注册JNI创建服务端Socket启动SystemSrver进程SystemServer进程启动: 启动Binder线程池和SystemServiceManager,并启动各种系统服务Launcher启动在SystemServer进程中启动ActivityManagerService服务后启动Launcher桌面程序启动后显示已安装应用的快捷图标Android启动流程zygote启动流程SystemServer启动过程SystemServer启动过程四、Activity启动流程Activity启动流程五、Window5.1绘制window 显示与绘制相关view绘制原理三个核心方法measure, layout,drawView draw方法分为下面 6 步绘制背景保存 Canvas 图层为后续淡出做准备可选绘制 View 的内容绘制子 View (dispatchDraw)绘制淡出边缘并恢复 Canvas 图层可选绘制装饰比如 foreground 和 scrollbar5.2Android事件分发机制Android事件分发机制六、PackageManagerServicepackageManagerService学习总结七、PowerManagerServicePowerManagerService学习总结八、通知显示流程Android通知显示流程九、Media 相关IJKPlayer学习总结MediaSession框架学习总结十、Wi-FiWi-Fi 和AP共存方案研究Wi-Fi 学习总结