
源码分析
文章平均质量分 87
韭菜鲜肉大馄饨
除了死亡所有的离开都是背叛...
展开
-
bindService() 跨进程调用流程的请求流程
bindService 跨进程调用流程的请求流程## ContextImpl#bindService()### Parcel#writeStrongBinder()### BinderProxy#transact()## 剩下的流程就概括一下## 最后看下 InnerConnection 是个啥?原创 2023-03-09 06:09:51 · 490 阅读 · 0 评论 -
Binder—Binder 对象生命周期
Binder——Binder 对象生命周期注册服务流程注册服务整个流程,涉及 Binder 对象生命周期的地方,概括如下:获取服务流程获取服务整个流程,涉及 Binder 对象生命周期的地方,概括如下:获取服务过程,涉及 Binder 对象声明周期,时间路线:BpBinder 对象存在直接返回已创建的,从代码角度看体现在哪?注册服务流程注册服务,详细步骤如下:注册服务进程发送 BC_TRANSACTION 协议给 Binder 驱动程序 // 调用的是 binder_thread_write 函数,原创 2020-08-11 15:39:23 · 971 阅读 · 0 评论 -
Binder—获取服务
Binder—获取服务获取服务一、BC_TRANSACTIONbinder_ioctl二、BR_TRANSACTION三、BC_REPLY四、BR_REPLY五、Client 收到服务句柄 handle获取服务(1)Client 进程将进程间通信数据封装在 binder_write_read 中,用来传递给 Binder 驱动程序Client 进程发送的进程间通信数据:目的进程 ServerManager + 服务名称(要访问的服务) + 要调用的函数:该函数返回服务句柄(2)Client 进程原创 2020-07-22 13:12:32 · 879 阅读 · 0 评论 -
Binder—ServiceManager 启动过程
Binder—ServiceManager 启动过程一、main:入口函数1.1 binder_open:打开和映射 Binder 设备文件1.2 binder_become_context_manager:注册为 Binder 进程间通信机制的上下文管理者1.3 binder_loop:循环等待 Client 进程请求二、ServiceManager 启动过程时序图一、main:入口函数[–>service_manager.c, main()]int main(int argc, char *原创 2020-07-21 03:56:27 · 679 阅读 · 0 评论 -
第八周总结
时间:2019 年 02 月 18 日 ~ 2019 年 02 月 22 日第八周总结一、[Exception 和 Error 有什么区别](https://blog.youkuaiyun.com/qq_21586317/article/details/87892741)二、[学习计划_Android 入门学习指南](https://blog.youkuaiyun.com/qq_21586317/article/d...原创 2019-02-23 19:20:36 · 159 阅读 · 0 评论 -
第九周总结
时间:2019 年 02 月 25 日 ~ 2019 年 03 月 01 日第九周总结一、HandlerHandler 消息机制在子线程中使用 Handler 的栗子二、从 ActivityThread#main() 到 Activity#onCreate()一、HandlerHandler 消息机制Handler 消息机制除了 Handler 本身外,还包含:Looper、Messa...原创 2019-03-02 20:16:29 · 229 阅读 · 0 评论 -
对 requestDisallowInterceptTouchEvent() 方法的理解
一、ViewGroup#dispatchTouchEvent()ViewGroup#dispatchTouchEvent()// 处理第一个 down if (actionMasked == MotionEvent.ACTION_DOWN) { // 当开始一个新的触摸手势时,丢弃所有以前的状态 cancelAndClearTouchTargets(ev); // 清除所有接触目...原创 2019-02-16 00:27:14 · 2883 阅读 · 0 评论 -
获取 ActivityManagerService 服务
获取 ActivityManagerService 服务一、Java 层获取系统服务二、SystemServiceRegistry 静态代码块,创建并保存服务三、获取 ActivityManagerService 服务流程四、补充:API 25 获取 AMS 的方式API 26一、Java 层获取系统服务Context#getSystemService()// Context 的实现类是 ...原创 2020-08-13 00:37:33 · 4930 阅读 · 0 评论 -
MessageQueue#next() 方法图解
MessageQueue#next 图解一、MessageQueue#next() 图解二、小节一、MessageQueue#next() 图解二、小节对于 Message#next() 方法,若当前消息是同步屏障,从队列中取异步消息,出并先执行;反之,则依次执行队列中的同步消息...原创 2019-03-24 18:48:39 · 2300 阅读 · 2 评论 -
bindService() 调用流程
bindService 调用流程一、bindService() 调用流程时序图二、bindService() 调用流程文字描述API 28一、bindService() 调用流程时序图二、bindService() 调用流程文字描述bindService() -> ContextImpl#bindService() -> ContextImpl#bindServiceC...原创 2019-03-24 00:32:11 · 1138 阅读 · 1 评论 -
简单理解 Binder 机制
简单理解 Binder 机制一、为什么要用 Binder二、Binder 进程间通信机制三、Java 层中的 Binder 分析关键一:getIServiceManager()问题一:getIServiceManager() 方法返回是什么,ServiceManager 的代理对象吗关键 1.1:ServiceManagerNative.asInterface() 需要关键 1.2 的返回值作为参...原创 2020-02-29 21:10:32 · 1241 阅读 · 1 评论 -
第七周总结
时间:2019 年 02 月 11 日 ~ 2019 年 02 月 15 日第七周总结一、[为什么主线程没有被 Looper#loop() 方法的死循环卡死](https://blog.youkuaiyun.com/qq_21586317/article/details/87218129)二、[对 requestDisallowInterceptTouchEvent() 方法的理解](https://b...原创 2019-02-17 14:09:10 · 141 阅读 · 0 评论 -
第五周总结
时间:2019 年 01 月 28 日 ~ 2019 年 02 月 01 日第五周总结一、LayoutInflater 三参方法含义及工作流程二、进程和线程、创建线程方式、线程生命周期3.1 进程和线程3.2 线程的创建有三种方式3.3 线程生命周期三、ScrollView 包裹 ListView 只显示一行的原因及解决方法一、LayoutInflater 三参方法含义及工作流程1.三参...原创 2019-02-02 11:10:58 · 355 阅读 · 0 评论 -
ListView 缓存机制
一、从 ListView#setAdapter() 开始:ListView#setAdapter():若 Adapter 和 AdapterDataSetObserver 都不为空,则解注册之前的观察者调用 resetList() 清空集合super.resetList() // 清空集合RecycleBin#clear();若存在头部和尾部布局,则将传入的 adapter 进行包装...原创 2019-02-01 04:21:18 · 418 阅读 · 0 评论 -
动态代理总结
一、代理模式1.1 什么是代理模式为其他对象提供一种代理,以控制对这个对象的访问 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到到中介的作用1.2 动态代理的优缺点优点: a. 职责清晰,只关心实际的业务逻辑,不用关心其他 b. 代理对象在在客户端和目标对象之间祈祷中介作用,保护目标对象 c. 高扩展性...原创 2018-08-04 17:37:45 · 366 阅读 · 0 评论 -
Android 第三十周 - 谈谈对 AsyncTask 的理解
谈谈对 AsyncTask 的理解一、AsyncTaskAsyncTask 是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果都传递给主线程并在主线程中更新 UI总结: 1. AsyncTak 封装了 Thread 和 Handler,所以可以在子线程中执行任务,在主线程中更新 UI 2. 如果应用和主线程没有交互,则应该使用 Thread,而不是...原创 2018-08-26 14:29:42 · 333 阅读 · 1 评论 -
了解 Messenger
一、MessengerMessenger 可以在不同进程中传递 Message 对象,是一种轻量级的 IPC 方案,底层实现是 AIDL总结:Messenger 之所以能够跨进程通信,是因为底层涉及到了 Binder,而 Binder 在 Android 中就是一种跨进程通信的方式1.1 Messenger 的理解1.Messenger 对 AIDL 做了封装,所以不用我们手动...原创 2018-08-30 01:00:10 · 342 阅读 · 0 评论 -
交换两个 Integer
题目:public static void main(String[] args) { Integer a = 1; Integer b = 2; System.out.println("before swap: a=" + a + ",原创 2018-09-16 00:48:01 · 419 阅读 · 0 评论 -
ThreadLocal 的实现原理和应用场景
一、ThreadLocal 是什么ThreadLocal 是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获取到数据...原创 2018-09-24 21:18:19 · 289 阅读 · 0 评论 -
View 的事件分发机制
View 的事件分发机制一、基本概念二、事件分发从 ViewGroup 开始三、ViewGroup 分发事件ViewGroup#dispatchTouchEvent():四、View 对事件的处理View#dispatchTouchEvent():一、基本概念1.对点击事件的分发,其实就是对 MotionEvent 事件的分发过程根据面向对象的思想,事件被封装成了 MotionEvent 对...原创 2018-10-20 23:54:00 · 288 阅读 · 0 评论 -
Activity布局加载流程
布局加载流程1. Activity.setContentView() 实现了把布局文件中对应的内容加载到 DecroView 中;2. contentParent 是一个 id 为 content 的 FrameLayout,Activity 对应的布局内容就是添加在这个 FrameLayout 中原创 2018-03-29 04:09:19 · 763 阅读 · 2 评论 -
Android 进阶解密:根 Activity 启动过程
一、根 Activity 启动过程可以分为三个部分:① Launcher 请求 AMS 过程② AMS 到 ApplicationThread 的调用过程③ ActivityThread 启动 Activity二、Launcher 启动 AMS 过程在桌面点击应用图标,会调用 Launcher#startActivitySafely() 方法public boolean startA...原创 2019-01-01 00:06:32 · 734 阅读 · 0 评论 -
在 onResume() 中如何获取 View 宽高
一、测试代码1.activity_main.xml:<?xml version="1.0" encoding="utf-8&原创 2018-06-09 12:27:00 · 2530 阅读 · 6 评论