自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(22)
  • 资源 (5)
  • 收藏
  • 关注

原创 Fence同步

由于GPU的执行是异步的,向GPU发命令,CPU是不知道命令什么时候执行完的,如果GPU渲染的内容还没完成,图形缓存的内容可能是空的或者不完整的,此刻CPU就开始对它进行消费,读取出来的图形数据是有问题的。使用的是Fence的同步机制,Fence,是栅栏的意思,在CPU使用缓存的地方设置一个栅栏挡住,等GPU对该缓存的操作完成后,再通知把栅栏撤了,CPU就可以开始对缓存进行操作。通过上面的流程可以看到,生产者和消费者对于缓存的操作在时间轴上是没有重叠的,并且相隔很近。2)生产者通过GPU开始生产内容。

2024-04-13 23:03:34 424

原创 Android Camera预览通道

在HAL进程中,调用ANativeWindow的dequeue_buffer申请缓存,调enqueue_buffer投递缓存,根据前面介绍eglSwapBuffers已经知道,enqueue_buffer会调到Surface的queueBuffer,dequeue_buffer调到Surface的dequeueBuffer。》中介绍了2D图形和3D图形的生产过程,对于视频的生产方式没有介绍,这里以Camera预览为例,介绍Camera拍摄得到的图像是如何传递到显示设备显示的。

2024-04-13 22:51:02 426

原创 理解SurfaceView和SurfaceTexture

该对象创建后,在native层会创建缓存队列,同样存在图形流生产者和图形流消费者,图形流程生产者可得到Surface,通过Suface可向图形缓存生产图形数据,生产好的图形数据由SurfaceTexture传递到纹理对象中,从而被GPU渲染出来。ViewRootImpl的Surface与SurfaceView的Surface存在父子关系。SurfaceView本质上是一个View,它与一般View的区别是它有自己的Surface,而一般的View使用的ViewRootImpl中的Surface,如下所示。

2024-04-12 23:53:21 232

原创 Android系统冻屏、黑屏问题的分析思路

是新加的方法,需要在Layer也加上相应的实现,如下。》可以指导,应用的图形内容要经过SurfaceFlinger才能传递到显示设备,SurfaceFlinger每隔一定时间(间隔由帧率决定)会向屏幕传递图形数据,但是并不是每个应用的图形都会显示,只有最前面应用的画面才能显示,应用的图形数据一般保存在图层中,因此每次刷新都会收集可见的图层。在Android系统开发过程中,偶尔会遇到显示异常的问题,如画面不再刷新,也就是冻屏,或者屏幕变黑,如果对图形显示系统不熟悉,遇到此类问题还是比较棘手的。

2024-04-12 23:30:16 1450

原创 图层、窗口、画布、视图

窗口一般对应于SurfaceFlinger中的一个图层,窗口主要用于控制图层的状态,或者向图层传递图形数据,WMS使用SurfaceControl控制图层的状态,比如前后顺序,位置,透明度等。4)视图,也就是View,是UI的组成部分,向TextView, ImageView和RelativeLayout等都属于视图,视图主要调用画布的接口绘制它的内容,视图可以响应输入事件。3)画布,也就是Canvas,画布主要主要对渲染库和图形缓冲进行封装,并向外提供接口,开发者通过这些接口即可把图形渲染到图形缓冲中。

2024-04-11 22:47:25 337 1

原创 套接字通信模型

调用socketpair成功后,会返回两个套接字的文件描述符,文件描述符可执行读和写操作,对其中一个文件描述符执行写操作发送数据,另一个文件描述符会收到数据,执行读操作可把数据读取出来,反过来也是可以的,因此套接字可以双向传输。进程A通过socketpair创建了一对套件字,文件描述符分别为FD0和FD1,通过Binder方式把FD0传给进程B,进程B收到的文件描述符为FD0',FD1和FD0。有数据,执行读操作可把数据读取出来,从而实现了进程A向进程B传输数据,反过来进程B也可向进程A传输数据。

2024-04-11 22:24:37 286 1

原创 Android 输入法框架

输入法属于输入系统的一部分,区别于输入系统只能向系统产生时间,输入法能向系统输入具体的内容,下面来认识输入法的大体框架,以下内容参考清华大学出版社出版的《Android图形显示系统》。它的主要功能是为应用进程和输入法进程建立输入法会话。(3)InputMethodManager(IMM):输入法管理,应用进程通过它请求显示输入法,接收到输入内容后传给输入框。(2)InputMethodService(IMS):输入法服务,负责显示输入法界面,并把输入的内容传给应用进程。

2024-04-10 22:35:12 280 1

原创 Android输入框架

在Android系统中,输入系统是不可缺少的,下面简单介绍输入系统的整体框架,以下内容参考清华出版社出版的《Android图形显示系统》。(4)应用进程的NativeInputEventReceiver负责接收InputDispatcher发送过来的输入事件,收到事件后传递到java层的WindowInputEventReceiver。(3)InputManager主要成员包括InputReader和InputDispatcher,前者负责从驱动层读取输入事件,后者负责把输入事件传给目标窗口。

2024-04-10 22:25:44 159 1

原创 HwBinder流程分析

HwBinder与普通Binder是一样的,区别是前者是专门给硬件使用,后者是给一般的应用程序使用,为了不影响现有的binder,单独增加硬件的HwBinder来实现硬件相关进程的通信。HwBinder也是有四部分组成:hwservermanager、server、client,driver,其中Driver部分与普通Binder是一样的,《Android图形显示系统》对Binder的原理进行过详细的介绍,这里主要介绍HwBinder与Binder不一样的地方。

2024-04-09 22:28:26 629

原创 Binder线程池

startThreadPool开启一个新线程,并加入到线程池中接收和处理请求。经过以上2步,线程池就有2个空闲线程等待处理请求。Binder是支持并发请求的,也就是多个客户进程可以同时向同一个服务进程发送请求,服务进程需要同时处理这些请求。如果某个时间点服务进程同时收到多个请求,当前的线程已经处理不过来,会动态地增加线程,增加新线程的条件如下。服务进程使用线程池接收和处理请求,线程池是管理多线程的一种方式,使用线程池有以下3点好处。服务进程开启线程池的方法比较简单,方法如下。

2024-04-09 09:24:36 358

原创 Binder通信模型

为了使得客户进程与服务进程通信,服务进程需要向服务管理进程添加服务,添加的过程中在驱动层创建binder_node对象记录服务对象的信息,同时在服务管理进程创建binder_ref对象与服务进程的binder_node对象关联。客户进程向服务管理进程查询是否有特定名称的服务,如果查询到服务,在返回结果的过程中,在客户进程也创建binder_ref对象,该对象同样与binder_node对象关联,binder_ref的句柄最终会保存到BpMyService的BpBinder中。

2024-04-08 22:11:09 295

原创 Android图形显示架构概览

图形流生产者一般指的是各个应用,应用通过不同的方式生产出要显示的图形流。对于图形显示而言,消费过程是将各个应用生产的图形数据进行汇总,根据窗口管理提供的窗口元数据将多个图形数据合成到帧缓冲(硬件抽象层封装了与底层驱动交互的细节,对外提供简单的接口,有了硬件抽象层,图形消费者只需调用相关的接口即可与底层驱动进行交互,无须关心具体的交互细节。在硬件抽象层有两个与图形显示系统相关的组件,分别是Gralloc和Hardware Composer,前者负责图形缓冲的分配,后者负责将图形缓冲的内容传递到底层驱动显示。

2024-04-08 08:51:19 767

原创 android上的openRawResourceFd失败

AssetFileDescriptor fd = res.openRawResourceFd(R.raw.myfile); 抛出FileNotFound异常InputStream stream = res.openRawResource (R.raw.myfile); 却成功原因是在打包的时候,默认将文件名的后缀也压缩了,在app目录下的build.gradle里添加android {...aaptOptions { noCompress "json" //表示..

2021-02-05 15:17:14 1247

原创 dynamic web project依赖的jar访问不到dll库

一般的java工程放到工程的根目录即可而dynamic web project要放到eclipse的目录dll文件放到eclipse的目录,放到别的 地方找不到

2016-09-08 14:09:45 527

原创 android 网络变化流程

Step 1:注册监听事件GsmServiceStateTracker(CdmaServiceStateTracker) 在构造函数就会通过registerForVoiceNetworkStateChanged 注册网络状态的变化监听,处理事件为EVENT_NETWORK_STATE_CHANGEDStep 2:modem主动上报01-25 10:13:56.717 D/RILJ   

2016-01-25 11:04:10 4808

原创 linux IP包收发流程

本文介绍的是linux下收发网络数据包的流程,传输层有TCP,UDP,网络层IPV4,IPV6,这里以TCP、IPV4为例发送流程:Step 1: socket:sock_sendmsg, socket层: 调用的是_sock_sendmsg,这一步先检查权限security_socket_sendmsg,接着调下一步_sock_sendmsg_nosec,这一步根据是TCP还是UDP的协

2016-01-19 14:07:51 3656

原创 binder的调用流程

本文主要接收客户端通过binder调到服务端的过程,也就是从transact到onTransact的过程客户端发的请求Step 1:transact一步会调用remote的transact,而该remote对象是通过ServiceManager获取回来的一个IBinder实例Step 2:BinderProxy:transact:调用transactNativeStep 3:and

2016-01-18 19:27:32 1463

原创 Android 移动数据连接状态通知到连接管理的流程

在5.0上,移动数据状态通知到连接管理的流程发生了比较大的改变,并非通过dctracker来通知了,而是通过NetworkAgent。在DataConnection的DcActiveState的enter里就会创建NetworkAgent的对象,因此可以知道在数据连接没有建立成功之前,是不把前面的状态告知ConnectivityService的。在NetworkAgent的构造函数里,会通

2016-01-15 15:19:56 5048

原创 android 数据图标的刷新通知流程

本文主要介绍底层发送数据连接状态变化时,如何通知到信号栏来刷新数据图标的路程Step 1:DcTracker:notifyDataConnection  通过遍历各个apn类型,分别发送通知到phoneStep 2: Phonebase:notifyDataConnection 获取状态后,发给notifierStep 3:DefaultPhoneNotifier:noti

2016-01-15 10:51:21 1502

原创 android 6.0 用非数据主卡发彩信的切换DDS的过程

本文主要讲述用非数据主卡发彩信时,如何切到该账户激活数据,发送成功后,如何恢复到默认DDS的在 《Android 6.0 自动开启移动数据流程》讲述过默认的数据连接的启动流程,其实发彩信跟它基本上是一样的,不同的地方是默认的networkRequest是ConnectivityService里添加的,开机后就会把该请求放到队列中去,而彩信的请求是有彩信应用发过来的。区别在QtiDctCon

2016-01-14 17:52:41 3221

原创 Android 6.0 自动开启移动数据流程

在M版本,触发建立默认的数据连接的机制跟以前的版本有比较大的变化,本文主要介绍触发建立数据连接的开始阶段,而建立data call的过程跟之前是一样的,只要条件准备好了发起就可以了。step 1:在ConnectivityService构造的时候就创建了一个默认的default Request,mDefaultRequest网络工厂连接上以后,就请求网络连接

2016-01-14 14:37:35 7261 1

原创 Android M版本设置数据主卡的流程

1、    SubscriptionController:setDefaultSubId设置数据库MULTI_SIM_DATA_CALL_SUBSCRIPTION2、    DctController:mObserver:onChange发送EVENT_SETTINGS_CHANGED,在onSettingsChanged处理3、    QtiDctController.onSet

2015-12-31 14:23:37 4273

多核通信-共享内存

介绍android平台AP与modem两边的系统通过共享内存进行通信的机制

2013-05-25

understanding-linux-network-internal

对linux的网络协议栈进行比较详细的介绍,对于深入理解协议栈很有帮助

2013-05-24

MPEG1 11172-1

MPEG-1标准: part 1: 系统

2011-01-16

Android多媒体框架

简单讲述了android平台支持的媒体格式和多媒体模块的架构

2010-07-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除