- 博客(12)
- 资源 (2)
- 收藏
- 关注
原创 Android SurfaceFlinger对VSync信号的处理过程分析
在Android SurfaceFlinger服务的消息循环过程源码分析中分析了SurfaceFlinger的消息循环过程,SurfaceFlinger通过维护一个消息队列来实现消息的异步处理。Android应用程序消息循环源码分析介绍了消息循环定义的Looper对象不仅可以处理Java层和C++层的消息,同时也可以监控用户添加的文件句柄。Android SurfaceFlinger服务的
2013-11-28 12:14:35 7606
原创 Android VSync事件分发过程源码分析
在上一篇文章Android VSync信号产生过程源码分析中分别介绍了VSync的两种产生方式,无论是通过硬件中断产生还是通过软件模拟产生,VSync事件最终都会交给EventThread线程来分发给所有VSync事件接收者。VSync事件接收者有很多,SurfaceFlinger就是其中一个重要的VSync事件接收者。那么EventThread线程是如何知道该将VSync分发给谁呢?EventThread线程有是如何将VSync事件分发给所有VSync事件接收者的呢?本文就针对这两个问题展开分析。我们知道
2013-11-27 15:27:46 6404
原创 Android VSync信号产生过程源码分析
在上一篇Android Project Butter分析中介绍了Android4.1通过引入VSync机制来改善显示效果,并分析了VSync机制的原理。本文主要分析VSync信号的产生过程。VSync信号产生有两种方式,一种是硬件中断产生,另一种是使用软件模拟产生,至于使用何种方式产生VSync信号,就和硬件系统配置有关。在Android4.1以后的版本中,定义了HWComposer硬件抽象模
2013-11-26 20:30:08 9554
原创 C++ 对象创建方式
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test()。 这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种 (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
2013-11-23 15:55:38 1737
原创 Android Project Butter分析
随着时间的推移,Android OS系统一直在不断完善。但直到Android 4.0问世,有关UI显示不流畅的问题也一直未得到根本解决。在整个进化过程中,Android在显示系统这块也下了不少功夫,例如,使用硬件加速等技术,但本质原因似乎和硬件关系并不大,因为iPhone的硬件配置并不比那些价格相近的Android机器的硬件配置强,而iPhone UI的流畅性强却是有目共睹的。从Android 4.1(版本代号为Jelly Bean)开始,Android OS开发团队便力图在每个版本中解决一个重要问题。作
2013-11-23 11:16:42 6512 2
原创 Android GraphicBuffer分配过程
Android系统定义GraphicBuffer数据类型来描述一块图形buffer,该对象可以跨进程传输。IGraphicBufferAlloc是专门用于分配GraphicBuffer对象的工具类,该类是基于Binder进程间通信机制框架设计的,其类继承关系如下:由于IGraphicBufferAlloc是基于Binder进程间通信框架设计的,因此该类的实现分客户端进程和服
2013-11-22 19:38:52 19648
原创 Android应用程序消息循环源码分析
消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取出来,并分发给相应的Handler进行处理;如果队列中没有消息,消息循环线程就会进入空闲等待状态,等待下一个消息的到来。在编写Android应用程序时,当程序执行的任务比较繁重时,为了不阻塞UI主线程而导致ANR的发生,我们通常的做法的创建一个子线程来完成特定的任务。在创建子线程时,有两种选择,一种通过创建Thread对象来创建一个无消息循环的子线程;还有一种就是创建一
2013-11-14 13:31:02 4121
原创 Android SurfaceFlinger服务的消息循环过程源码分析
在Android SurfaceFlinger服务启动过程源码分析中详细分析了SurfaceFlinger的整个启动过程,我们知道,在SurfaceFlinger线程执行过程中,循环调用waitForEvent()函数等待消息事件的到来,而waitForEvent函数则是调用SurfaceFlinger中的消息队列的waitMessage()函数来等待消息事件。本文就针对SurfaceFlinger的消息队列MessageQueue展开讨论,分析SurfaceFlinger的消息队列创建过程。由于在Andr
2013-11-09 14:19:07 6672
原创 Android输入管理服务启动过程源码分析
Android系统的输入管理服务同其他服务一样,也是驻留在SystemServer进程中,该服务是随WindowManagerService服务启动而启动。在frameworks\base\services\java\com\android\server\SystemServer.java中的ServerThread线程中启动WindowManagerService,WindowManagerService是Android的Java服务,也是遵循Java层Binder通信框架设计的,其类结构关系如下图所示:
2013-11-05 20:01:12 4994
原创 Linux系统IO复用接口(select、poll、epoll)
epoll仅仅是一个异步事件的通知机制,其本身并不作任何的IO读写操作,它只负责告诉你是不是可以读或可以写了,而具体的读写操作,还要应用程序自己来完成。epoll仅提供这种机制是非常好的,它保持了事件通知与IO操作之间彼此的独立性,使得epoll的使用更加灵活。
2013-11-04 09:14:30 5733 1
原创 Linux进程间通信方式之管道(pipe)
每个进程各自有独立的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,但是所有进程都共享内核地址空间,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,Inter Process Communication)。如下图所示。
2013-11-04 08:18:12 8561
原创 Linux文件系统Inotify机制
Inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入。它是一个内核用于通知用户空间程序文件系统变化的机制。开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有效的管理,udev 动态地维护 /dev 下的设备文件,inotif
2013-11-01 09:38:43 5848 1
Android下拉刷新实现一源码
2013-09-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人