绑定服务获取远程binder流程

匿名binder不会存储ServiceManager里面,所以没法通过getService查询,来看看常用的bindService是如何获取一个匿名Binder的 匿名Binder的创建 应用层传输逻辑 以Service中的onBind函数返回一个binder对象为例子,我们先画下时序图


Binder驱动一次拷贝的原理

我们基于kernel6.1源码分析 当客户端进程发起binder请求向服务进程传递数据时,客户端获取到BpBinder发起跨进程调用,调用链如下 BpBinder::transact    IPCThreadState::transact    IPCThreadState::waitForRe


ServiceManager架构

ServiceManager是binder服务的管理者,服务端注册Binder,客户端获取binder都要通过ServiceManager,充当了一个binder路由转发的角色。 ServiceManager是一个独立的进程,在Java层提供了一个ServiceManager的接口类,真正的实现是在


Binder线程池

创建PoolThread Zygote创建进程之后通过app_main::onZygoteInit函数初始化ProcessState,这个类代表进程且是一个单例对象,整个进程只有一个,接下来调用函数ProcessState::startThreadPool创建线程池 void ProcessStat


SystemUI Plugin插件原理

本文基于Android-15.0.0_r22 aosp PluginManager初始化 注册插件监听器 PluginManager所有功能均有PluginManagerImpl类实现。 SystemUI每一个插件化的功能或者服务在初始化时会创建一个PluginListener对象并调用接口Plug


Git常用命令笔记

创建分支 git checkout -b new_branch 基于远程分支创建分支 git checkout -b new_dev origin/develop 等效于创建并切换到新分支 git branch new_branch &&am


Activity启动流程分析

启动阶段分析 我们把Activity启动分为4个阶段, 阶段1:用户点击应用图标,由Launcher传入参数,ATMS构建ActivityRecord和Task 阶段2:Pause掉Launcher的Activty 阶段3:Zygote进程创建目标进程,触发ActivityThread的运行 阶段4


Android SELinux权限异常分析

问题 起因是视频播放器播放一个视频没有声音,实际上视频播放的是raw资源自带的默认视频,所有视频资源都放在 /data/link/ac/videocomfort/video 下边 从log来看发现检测文件存在返回结果为false,我们查了系统目录下是有资源的,首先就怀疑权限问题 SELinux关键日


Android Activity Transaction

发起Transaction 在分析Activity生命周期回调的源码的时候,我们经常会看到这样的代码 mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.token, Pau


多动画时序错乱的优化

最近处理了一个动画的问题,很有意思,这里记录一下 框架预览 现在我们有一个页面,底部是一个滚动的RecyclerView,每个item是一个program显示其图片,当选中任意一个program将会放大并获取焦点,整个背景要显示program对应的programCover封面,结构如下 所有动画类型