- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 Vsync事件分发主要过程
创建两个EventThread线程,一个属于SF,一个属于Choreographer,并运行创建DisSyncThread线程并运行两个EventThread初始化时会添加一个Connection,并且把自己注册给DisSyncThread的mListenners,也就是所谓的观察者模式当有信号VSync来的时候,经过HWC到SF到DisSyncThread,DisSyncThread分发...
2018-03-08 20:17:16
610
原创 Android应用进程和SurfaceFlinger的关系
首先一个Android进程会在连接SF服务的时候在SF中创建一个Client对象,Client对象和Android进程一一对应。1中创建Client对象是一个Binder实体,会在进程连接SF返回给Android进程。这样Android通过Binder代理可以向SF发送请求,例如创建Surface每个进程都会通过Client的Binder代理向SF申请一块匿名共享内存ShareClient...
2018-03-08 17:42:43
495
原创 Android贯穿两层的消息机制(Looper)
Android同一进程中线程的消息传递使用的主要方法就是MessageQueue+Message+Handle+Looper,该方法贯穿Native层和Java层,Java层的实现对于Android工程师来说较为容易理解,Native层由于设计到epoll等linux相关内容较难理解,下面将从MessageQueue的角度理解Native层的消息机制。 各个类的角色: java层: * ...
2018-03-05 15:26:41
283
原创 Input流程简述
InputManagerService:system_server中的binder实体,其实只是native层的代理InputManger:native层真正处理事件的类,持有InputReader和InputDispatcherEventHub:硬件驱动读取到事件并将事件信息写入到设备节点,EventHub负责从设备节点读取事件InputReader:持有InputReaderThrea...
2018-03-04 19:38:51
441
原创 Activity启动流程
Activity调用startActivity主要是当前进程和AMS之间的交互,如果需要创建新进程则还需要AMS通过Socket通讯方式向Zygote请求创建新进程。 1. 当前进程通过Binder告诉AMS让它开始为启动Activity做准备,同时将当前进程的ActiviyThread传递给Activity,ActivityThread是一个Binder实体,AMS用它实现和当前进程的直接通讯...
2018-03-04 11:25:35
229
原创 Android常见内存泄漏
内存泄漏的基本原因还是因为不使用的对象仍然可达,Android中常出现的就是Activity对象,只要切断Activity的引用或者Activiy退出时切断带有Activity引用的对象都可以避免。Context内存泄漏如果Context对象是Activity,当Activity退出后,其他类仍然保存有该Context,则会内存泄漏,因此这种情况使用getApplicationCont...
2018-03-04 10:52:15
275
原创 Java与线程
线程实现内核线程 内核线程由操作系统调度需要进入内核态,程序一般不直接使用内核线程而是使用内核线程的高级接口——轻量级进程,也就是通常意义上说的线程,内核线程系统调度频繁,资源消耗较大。为1对1模型用户线程 用户线程由进程独立调度,操作系统无法感知,实现比较复杂,但是资源消耗少。1对多模型用户线程加轻量级进程混合实现 一个轻量级进程可以映射多个用户线程,集合内核线程和用户线程两者的优点,
2018-03-01 16:52:11
187
原创 Java内存模型
Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和内存访问的差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果,注意这里的模型指的是概念模型。主存内与工作内存主内存:JVM中存储变量(局部变量和方法参数除外)的内存区域 工作内存:线程私有的内存,保存了被该线程使用到的变量的主内存副本拷贝 Java内存模型定义了8种操作,它们是原子的: - lock:给变量上锁
2018-03-01 16:06:54
221
原创 JVM内存划分及GC
java内存模型程序计数器:程序执行到的位置虚拟机栈:虚拟机栈是线程私有的,描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于记录存储局部变量表、操作数栈、动态链接、方法出口等信息。 局部变量表:一组变量值存储空间,用于存放方法参数和方法内局部变量,以变量槽为基本单位(Slot),在非静态上下文中,局部变量表的0索引位置是当前变量,也就是this指针,然后是方法参数
2018-03-01 09:20:47
295
原创 JVM类加载机制
1.类的加载时机类加载过程: 加载-验证-准备-解析-初始化-使用-卸载 验证-准备-解析 通常称为连接阶段虚拟机规范并没有规定class文件的类加载时机,但是严格规定了初始化的时机,而初始化之前一定要进行加载-验证-准备,解析则可以在初始化之前也可以在初始化之后。虚拟机规范规定了五种“当且仅当”的情况使类初始化(详细见Page210),需要注意的是数组对象只是创建了一个自动生成的类,不会
2018-02-28 17:05:32
185
原创 [Binder机制]众多Service启动流程-java层Service(一)
上一篇文章中讲述了大管家servicemanager的启动流程,其中servicemanager多次与binder驱动交互,最终由于读取不到service们发送的命令而挂起进程。本篇文章将以一个service启动为例,分析service启动的流程,以便大家更好的理解binder机制中各个角色的交互关系。
2017-05-12 20:08:49
628
原创 [Binder机制]大管家ServiceManager启动流程
[Binder机制]大管家ServiceManager启动流程 Binder机制作为android系统IPC(Inter-Process Communication,进程间通信)的主要方式,理解Binder机制至关重要。首先简要介绍IPC的个人理解。IPC的概念是随进程产生而产生的,在操作系统相关知识中,进程代表资源管理单位,每个进程享有独立的内存空间,两个不同的进程之间不能直接互相访问内存
2017-04-26 19:09:05
683
Machine_Learning_for_High-Speed_Corner_Detection
2018-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人