Android开发大厂面试必问Framework知识点解析

一、深入解析 Binder

1.Binder开篇

  • 概述
  • Binder
    • IPC 原理
    • Binder 原理
    • C/S 模式
  • 提纲
  • 源码目录
    • Java framework
    • Native framework
    • Kernel

2.Binder Driver 初探

  • Binder驱动概述
    • 概述
    • 系统调用
  • Binder核心方法
    • binder_init
    • binder_open
    • binder_mmap
    • binder_ioctl
    • Command 使用场景
    • 小节
  • 附录
    • 结构体列表
    • binder_proc
    • binder_thread
    • binder_node
    • binder_ref
    • binder_ref_death
    • binder_write_read
    • binder_transaction_data
    • flat_binder_object
    • binder_buffer
    • binder_transaction
    • binder_work
    • binder_state

3.Binder Driver 再探

  • Binder通信简述
  • Binder通信协议
    • 通信模型
    • binder_thread_write
    • binder_thread_read
  • 场景总结
    • BC 协议使用场景
    • BR 协议使用场景
    • 协议转换图
    • 数据转换图
  • Binder内存机制

4.Binder 启动 ServiceManager

  • 概述
    • 流程图
  • 启动过程
    • main
    • binder_open
    • binder_become_context_manager
    • binder_loop
    • binder_parse
    • svcmgr_handler
  • 核心工作
    • do_find_service
    • do_add_service
    • binder_link_to_death
    • binder_send_reply
  • 总结

5.获取 ServiceManager

  • 概述
    • 流程图
    • defaultServiceManager
  • 获取 ProcessState 对象
    • ProcessState::self
    • 初始化 ProcessState
    • open_driver
  • 获取 BpBinder 对象
    • getContextObject
    • getStrongProxyForHandle
    • lookupHandleLocked
    • 创建 BpBinder
  • 获取 BpServiceManager
    • interface_cast
    • IServiceManager::asInterface
    • DECLARE_META_INTERFACE
    • IMPLEMENT_META_INTERFACE
    • BpServiceManager 实例化
  • 总结
    • 模板函数

6.注册服务(addService)

  • 概述
    • media 服务注册
    • 类图
    • 时序图
  • ProcessState
    • ProcessState::self
    • ProcessState 初始化
    • open_driver
    • mmap
  • 服务注册
    • instantiate
    • BpSM.addService
    • BpBinder::transact
    • IPC::transact
    • IPC.writeTransactionData
    • IPC.waitForResponse
    • IPC.talkWithDriver
  • Binder Driver
    • binder_ioctl_write_read
    • binder_thread_write
    • binder_transaction
  • ServiceManager
    • binder_parse
    • svcmgr_handler
    • do_add_service
    • binder_send_reply
  • 总结

7.获取服务(getService)

  • 获取服务
    • 类图
  • 获取Media服务
    • getMediaPlayerService
    • BpSM.getService
    • BpSM.checkService
    • BpBinder::transact
    • IPC::transact
    • IPC.writeTransactionData
    • IPC.waitForResponse
    • IPC.talkWithDriver
    • readStrongBinder
  • 总结

8.framework 层分析

  • 概述
    • Binder 架构
    • Binder 类图
    • Binder 类分层
  • 初始化
    • startReg
    • register_android_os_Binder
    • 注册 Binder
    • 注册 BinderInternal
    • 注册 BinderProxy
  • 注册服务
    • SM.addService
    • getIServiceManager
    • SMN.asInterface
    • SMP.addService
    • writeStrongBinder(Java)
    • writeStrongBinder(C++)
    • BinderProxy.transact
    • android_os_BinderProxy_transact
    • 小结
  • 获取服务
    • SM.getService
    • SMP.getService
    • BinderProxy.transact
    • android_os_BinderProxy_transact
    • BpBinder.transact
    • IPC.transact
    • IPC.waitForResponse
    • readStrongBinder
    • 小结
  • 实例
    • Binder
    • BinderProxy

9.如何使用 Binder

  • Native 层 Binder
    • 服务端
    • 客户端
    • 创建MyService
    • 原理图
    • 运行
  • Framework 层 Binder
    • Server 端
    • Client 端
    • 原理图
    • 运行

10.如何使用 AIDL

  • AIDL
    • Server 端
    • Client 端
    • AIDL 文件
    • Parcel 数据
    • 运行
  • 原理分析
    • 源码

11.Binder 总结

  • Binder概述
  • Binder架构
  • Binder进程与线程
  • Binder传输过程
  • Binder路由

12.Binder 面试题全解析

  • Binder 有什么优势
  • Binder 是如何做到一次拷贝的
  • MMAP 的内存映射原理了解吗
  • Binder 机制是如何跨进程的
  • 说说四大组件的通信机制
  • 为什么 Intent 不能传递大数据

二、深入解析 Handler 消息机制

1.宏观理论分析与 Message 源码分析

  • 预热
  • 设计 Handler 的初衷
    • Java 多线程通信
    • Android 多线程的特殊性
    • Android 多线程通信
    • 小结
  • Handler 提供的一些方法
    • 发送消息类方法
    • 处理消息类方法
    • 切换线程类方法
    • 使用Handler
    • 小结
  • Handler 实现原理 - 理论分析
    • 线程中接收消息端的特殊性
    • Looper - 线程独立
    • MessageQueue - 多线程同时发消息
    • 小结
  • Message 源码分析
    • Message 中的数据属性与方法
    • 创建与回收 Message 对象的基本方法
    • 扩展方法
    • 小结

2.MessageQueue 的源码分析

  • 消息队列存储原理
  • 使用 JNI 实现的 native 方法
  • 创建与销毁
  • 消息入队管理 enqueueMessage()方法
  • 同步消息拦截器
  • 队列空闲处理器 IdleHandler
  • 消息出队管理 next()方法
  • 总结

3.Looper 的源码分析

  • 创建与退出 Looper
  • 运行 Looper 处理消息
  • 总结

4.handler 的源码分析

  • 初始化
  • 发送消息
  • 接受消息
  • 内存泄漏的可能

5.Handler 机制实现原理总结

  • Message 缓存池
  • 真正的阻塞发生在 MessageQueue
  • 为什么推荐使用 Handler 实现线程间通信

6.Handler 面试题全解析

  • 一个线程有几个 Looper?几个Handler?
  • Handler 内存泄漏原因? 以及最佳解决方案?
  • 为何主线程可以 new Handler?如果想要在子线程中 new Handler 要做些什么 准备?
  • 子线程中维护的 Looper,消息队列无消息的时候的处理方案是什么?有什么 用?
  • 既然可以存在多个 Handler 往 MessageQueue 中添加数据(发消息时各个 Handler 可能处于不同线程),那它内部是如何确保线程安全的?
  • 我们使用 Message 时应该如何创建它?
  • Looper 死循环为什么不会导致应用卡死?

三、Dalvik VM 进程系统

1.Android 系统启动综述

  • 概述
  • init
    • Init.main
    • Zygote 自动重启机制
  • Zygote
    • App_main.main
    • AndroidRuntime::start
    • ZygoteInit.main
    • ZygoteInit.preload
    • ZygoteInit.startSystemServer
    • ZygoteInit.runSelectLoop
  • system_server
    • handleSystemServerProcess
    • RuntimeInit.zygoteInit
    • ZygoteInit.main
    • SystemServer.main
    • SystemServer.run
    • 服务启动
    • AMS.systemReady
  • app
    • ActivityThread.main
    • 调用栈对比
  • 启动日志分析
    • before zygote 日志
    • zygote 日志
    • system_server 日志
    • . logcat 小技巧
  • 总结
    • 进程 main 方法
    • 重启相关进程

2.Init 篇

  • 概述
    • main
    • log系统
    • console_init_action
    • restart_processes
  • 信号处理
    • signal_handler_init
    • reap_any_outstanding_children
    • register_epoll_handler
  • rc文件语法
    • Action
    • Service
    • Command
    • Options
  • 启动服务
    • 启动顺序
    • 服务启动(Zygote)
    • 服务重启
  • 属***
    • property_init
    • start_property_service
    • handle_property_set_fd
    • handle_property_set
  • 总结

3.zygote 篇

  • 概述
  • Zygote 启动过程
    • App_main.main
    • start
    • startReg
  • 进入 Java 层
    • ZygoteInit.main
    • registerZygoteSocket
    • preload
    • startSystemServer
    • runSelectLoop
    • runOnce
  • 总结

4.SystemServer 上篇

  • 启动流程
  • startSystemServer
  • forkSystemServer
  • nativeForkSystemServer
  • ForkAndSpecializeCommon
  • handleSystemServerProcess
  • performSystemServerDexOpt
  • zygoteInit
  • commonInit
  • nativeZygoteInit
  • applicationInit
  • invokeStaticMain
  • MethodAndArgsCaller

5.SystemServer 下篇

  • SystemServer 启动
    • SystemServer.main
    • SystemServer.run
    • createSystemContext
    • startBootstrapServices
    • startCoreServices
    • startOtherServices
  • 服务启动阶段
    • Phase0
    • Phase100
    • Phase480
    • Phase500
    • Phase550
    • Phase600
    • Phase1000
  • 服务类别

四、深入解析 WMS

1.WMS概述

  • 窗口管理
  • 窗口动画
  • 输入系统的中转站
  • Surface管理

2.WMS的诞生

五、PackageMS 启动

1.PackageMS 相关框架类

2.PackageMS 启动过程


#Android##面试题目#
全部评论
感谢大佬分享!!!!
点赞 回复 分享
发布于 2022-01-13 20:40

相关推荐

02-25 11:29
产品经理
牛客444597598号:兄弟 我只能说如果想找产品经理这种简历 基本就是毕业失业了 你这连实习都找不到的 简历跟产品经理一点都没有关系,你可以去搜搜产品的模版吧
点赞 评论 收藏
分享
评论
1
9
分享

创作者周榜

更多
牛客网
牛客企业服务