移动开发之Android
文章平均质量分 86
DroidPhone
版主从事多年的嵌入式开发和管理工作,欢迎各位CSDN的博友互相交流。 我的联系邮箱 droid.phx@gmail.com
展开
-
Android中的sp和wp指针
经常会在android的framework代码中发现sp和wp这样的指针,平时看的时候都把他当成一个普通的指针封装过掉了,这几天终于忍不住了,想深入了解一下。相关的代码:frameworks/base/include/utils/RefBase.hframeworks/base/libs/utils/RefBase.cppsp和wp都是一个模板类,看一下sp类的定义:template class sp{public: typedef typename RefBase::weakref_原创 2010-08-09 20:54:00 · 34558 阅读 · 14 评论 -
Android SurfaceFlinger中的Layer,LayerDim,LayerBlur,LayerBuffer
应用程序中不同类型的Surface,在FrameWorks本地层的SurfaceFlinger中,分别对应着不同的Layer类,本文主要是讨论这几种Layer的实现和差异。阅读本文之前,最好对SurfaceFlinger这个系统服务有所了解,可以参阅我的以下两篇文章:Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管理Android SurfaceFlinger中的工作线程:threadLoop() 视觉效果下面原创 2010-11-11 11:43:00 · 17413 阅读 · 4 评论 -
Android 本地代码中的LIKELY和UNLIKELY宏
<br />阅读Android Frameworks中的C++代码时,经常会碰到在条件判断语句中使用了LIKELY和UNLIKELY这两个宏,找到这两个宏的定义如下:<br />#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true ))#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) <br /> <br />long __builtin原创 2010-11-03 11:33:00 · 6102 阅读 · 2 评论 -
Android SurfaceFlinger中的工作线程:threadLoop()
SurfaceFlinger继承了Thread类,自然也继承了Thread类的threadLoop方法,SurfaceFlinger工作线程的主代码都在threadLoop()方法中。工作线程启动后,基类Thread会循环地调用threadLoop方法,SurfaceFlinger的threadLoop()主要是要完成系统中各个Layer(Surface)进行混合(compose),然后不停地把一帧帧混合好的图像数据传送到显示设备中。 threadLoop的流程 图一 t原创 2010-11-02 19:35:00 · 20530 阅读 · 8 评论 -
Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管理
SurfaceFlinger在系统启动阶段作为系统服务被加载。应用程序中的每个窗口,对应本地代码中的Surface,而Surface又对应于SurfaceFlinger中的各个Layer,SurfaceFlinger的主要作用是为这些Layer申请内存,根据应用程序的请求管理这些Layer显示、隐藏、重画等操作,最终由SurfaceFlinger把所有的Layer组合到一起,显示到显示器上。当一个应用程序需要在一个Surface上进行画图操作时,首先要拿到这个Surface在内存中的起始地址,而这块原创 2010-10-28 18:59:00 · 29036 阅读 · 19 评论 -
Android Audio System 之二:AudioFlinger
引言 AudioFlinger是Android音频系统的两大服务之一,另一个服务是AudioPolicyService,这两大服务都在系统启动时有MediaSever加载,加载的代码位于:frameworks/base/media/mediaserver/main_mediaserver.cpp。AudioPolicyService的相关内容请参考另一编文章:《Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager 》http原创 2010-10-19 19:01:00 · 45543 阅读 · 17 评论 -
Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager
引言 AudioPolicyService是Android音频系统的两大服务之一,另一个服务是AudioFlinger,这两大服务都在系统启动时有MediaSever加载,加载的代码位于:frameworks/base/media/mediaserver/main_mediaserver.cpp。AudioFlinger主要负责管理音频数据处理以及和硬件抽象层相关的工作。本文主要介绍AudioPolicyService。AudioPolicyService AudioPolicyService主原创 2010-10-18 17:25:00 · 61188 阅读 · 13 评论 -
Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
引子Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中进行播放,目前Android的Froyo版本设定了同时最多可以创建32个音频流,也就是说,Mixer最多会同时处理32个AudioTrack的数据流。如何使用AudioTrackAudioTrack的主要代码位于 fr原创 2010-10-14 17:39:00 · 73015 阅读 · 55 评论 -
Android中的2D引擎skia之 -- SkBitmap的内存管理分析
Android使用的2D图形引擎skia,是一个高效的2D矢量图形库,google已经把skia开源:http://code.google.com/p/skia/。SkBitmap是skia中很重要的一个类,很多画图动作涉及到SkBitmap,它封装了与位图相关的一系列操作,了解它的内存管理策略有助于我们更好的使用它,了解它的初衷是要想实现对skia中的blitter进行硬件加速。1. SkBitmap的类结构:2. SkBitmap的内嵌类Allocator3. SkPixelRef类4. 使用例原创 2010-10-05 16:11:00 · 14505 阅读 · 0 评论 -
surfaceflinger中的显示内存管理类--GraphicBuffer
1. Android中的应用层每申请一个Surface,最终会通过jni和binder调用到surfaceflinger中,最终会创建一个Layerxxx(Layer,LayerBuffer,LayerBlur,LayerDim)类,最通常的是Layer类,在Layer类中有一个成员变量: sp mBuffers[NUM_BUFFERS];Layer的成员函数SetBuffers()初始化了该数组: for (size_t i=0 ; i其中,NUM_BUFFERS的定义是2,原创 2010-09-17 21:02:00 · 12059 阅读 · 1 评论 -
Android Audio System线性音量和对数音量的转换
Android的音频系统的代码中,应用程序对每个音频流的音量做出调整后,最终会转换为一个系数K,所有的音频数据在输出到硬件之前,都要乘以系数K,只要应用程序发出调整音量的调用,中间层的Audio System就会重新计算系数K的值。对应用程序来说,音量控制通常都是按照线性进行调整的,比如对于具有15级音量的音频流来说,我们预期每级的音量变化都是相当的,也就是说:从第5级调到第6级,和从第7级调到第原创 2012-04-19 20:18:45 · 19434 阅读 · 2 评论