读书笔记
jiejingguo
这个作者很懒,什么都没留下…
展开
-
Binder驱动是如何维护本地Binder和Binder代理的映射关系
通信过程: binder设备驱动会为每个进程分配一个数据结构binder_proc,每进程中的每个用到了binder通信的线程分配数据结构binder_thread。binder设备驱动会为服务进程中的每个服务对象分配数据结构binder_node,它隶属于服务进程的binder_proc,即binder_node是binder_proc的子结构,binder_node中记录了服务对象在...转载 2018-09-07 15:32:19 · 626 阅读 · 0 评论 -
窗口机制的笔记
Activity的生命周期由ActivityThread管控Activity被实例化后最先调用的方法是attach(),在attach()中实例化PhoneWindowActivity.setContentView()最终调用的是PhoneWindow.setContentView()。在PhoneWindow.setContentView()中经历了一下步骤:1、创建DecorView;2...原创 2019-10-07 07:21:28 · 465 阅读 · 0 评论 -
Binder笔记
进程隔离:一个进程占一个内存空间,各个进程的内存空间完全隔离,数据不共享。Linux Kernel独立于普通的应用程序,可以访问任何内存空间。应用程序访问内核的唯一方式就是系统调用,当应用程序发起系统调用时,内核会检查应用程序是否越权访问,若否,则执行内核代码。当应用程序成功调用起内核代码时则称应用程序的进程处于内核态,否则处于用户态。Linux的动态可加载内核模块运行在内核空间中,用户进...原创 2018-07-09 15:53:41 · 265 阅读 · 0 评论 -
ViewRootImpl事件分发笔记
用户点击屏幕产生触摸行为,该触摸行为由底层硬件捕获并传递。 硬件 -> ViewRootImpl -> DecorView -> PhoneWindow -> Activity 在ViewRootImpl中准备了一条InputStage链。InputStage是个抽象类,有以下几个实现类,并形成单向链:NativePreImeInputStage ->原创 2018-06-30 17:00:22 · 1399 阅读 · 0 评论 -
Android的CPU架构
早起Android只支持ARMv5的CPU架构,而发展到现在,支持一下7种架构:ARMv5:现在很少了,应该不需要支持了ARMv7(2010年起):魅族M9,iphone 3GS,三星I9000等x86(2011年起):联想K800,使用这种架构的较少,毕竟Android手机大部分是ARMMIPS(2012年):可能有些国产厂商在用ARMv8:华为 Mate 8,Galaxy SM...转载 2018-03-29 15:49:34 · 1028 阅读 · 0 评论 -
C++面向对象程序设计
C++面向对象程序设计在C++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定,即JAVA中的多态基类通常要定义一个虚析构函数,即使该函数不执行任何实际操作,也是如此。在C++中基类的成员函数有两种:1、基类希望派生类进行重写的函数;2、基类希望派生类直接继承而不用改变的函数。对于前者,基类将其定义为虚函数。当指针或引用调用虚函数时,该调用将被动态绑定(即多态)。任何构...原创 2018-02-08 23:18:49 · 1122 阅读 · 0 评论 -
C++ 动态内存
C++ 动态内存动态分配的对象的生存期与它们在哪里创建的无关,只有当显式地释放时,这些对象才会被销毁。使用动态内存的一个常见原因是为了让多个对象共享(不是拷贝)内部的数据,并使得当一个对象销毁时,该数据不会被销毁,其它对象仍然可以正常使用。shared_ptr只在拷贝和赋值时其内部的引用计数器才会加1。所以不要用shared_ptr的get()初始化另一个智能指针shared_pt...原创 2018-03-02 16:19:34 · 151 阅读 · 0 评论 -
C++知识点杂谈
C++知识点杂谈C++中的三种赋值方式:按值传递。一个参数的值会复制给另一个参数:int a, b;a = b; 按地址值传递。一个地址值复制给一个指针:int a;int *p;p = &a;按引用传递。不开辟新的内存,相当于给参数起个别名:int a;int& b = a;C++的左值和右值:左值:可以被赋值,可以出现在赋值号的左边或右...原创 2018-02-08 09:22:03 · 231 阅读 · 0 评论 -
JAVA VS C++
JAVA VS C++不同处JAVA是在声明变量并初始化后才开辟内存空间的,而C++是在声明变量时就开辟了内存空间。 在JAVA中:int[] n;n = new int[10];//如果没有这句初始化,则下行代码会抛出空指针异常n[0] = 1;在C++中:int n[ 10 ];//声明时会直接调用构造函数,所以下面不会抛空指针异常n[0] = 1;...原创 2017-11-09 17:24:35 · 382 阅读 · 0 评论 -
C++ 内联函数
C++ 内联函数内联函数的目的在于提高效率。C++在编译时会将每个内联函数的调用点用函数体展开,如下:inline int max(int a, int b){ return a > b ? a : b;}则调用: cout<<max(a, b)<<endl;在编译时展开为: cout<<(a > b ? a : b)<<endl;从而避免了调用函数的额外开销。关键字 inline必须与函原创 2017-11-24 17:10:59 · 241 阅读 · 0 评论 -
Accelerated C++笔记
Accelerated C++笔记第0章cout:标准输出流 cin:标准输入流namespace(名字空间):其实就是为了方便重复使用变量名,给变量名设置的前缀标准库由很多个部分组成,如:iostream、string。标准库的名字空间即为std(standard)第1章<<和>>都是左结合初始化一个变量时,变量名后面跟着一对“...原创 2017-10-29 18:10:08 · 563 阅读 · 2 评论