自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 资源 (2)
  • 收藏
  • 关注

原创 AndroidO 图形框架下应用绘图过程——Surface创建

Android图形框架在前几年已经分析过了,不过,随着Android版本的升级,虽然框架主体未变,但有些细节变动还是比较大的,应网友要求,今天再次以AndroidO为基础,重新介绍图形框架实现,Android图形框架包括以下三大部分:1. 应用绘图;2. SurfaceFlinger混合图层;3. Hwc Hal实现本文首先介绍AndroidO下应用的绘图过程,应用绘图也分为以下几个步骤:sp&l...

2018-06-13 16:14:46 8732 14

原创 AndroidO 下图形显示框架变化介绍

Android显示框架随着Android版本的不断升级,也在不断变化修改,但主体框架未变,依然保持Android4.0上定制的实现结构,只是类命名更加清晰,实现方式更加明了,同时随着HAL版本的不断升级,增加了一些额外的接口,随着AndroidO引入Treble架构,显示框架也作了必要的调整。AndroidO之前版本下的显示实现框架如下图所示:整个显示过程由App,system_server和su...

2018-05-07 10:07:53 9419 3

原创 AndroidO Treble架构下HIDL服务Java框架实现

前面介绍了HIDL服务在native层的实现过程,包括HIDL服务加载创建、服务注册、服务查询过程等,那么Java层是否也实现了相关的服务框架呢? 通常情况下,所有的Hal都实现在native层面,每个hal进程都是一个native进程,由init进程启动,在hal进程启动时会完成HIDL服务注册,Framework Server进程不一定完全是native进程,比如system_server进程...

2018-04-10 12:14:55 6910 2

原创 AndroidO Treble架构下HIDL服务查询过程

通过前面的分析我们知道,Hal进程启动时,会向hwservicemanager进程注册hidl服务,那么当Framework Server需要通过hal访问硬件设备时,首先需要查询对应的hidl服务,那么Client进程是如何查询hidl服务的呢?这篇文章将展开分析,这里再次以IComposer为例进行展开。frameworks\native\services\surfaceflinger\Dis...

2018-04-09 18:09:40 8715

原创 AndroidO Treble架构下Tranport类型查询过程

通过前面文章的分析,我们知道,Client进程在查询hidl服务接口对象时,会根据该hidl服务的Tranport类型选择加载方式,如果是HWBINDER,那么就从hwservicemanager中查询,如果是PASSTHROUGH,那么就通过PassthroughServiceManager将hal实现库dlopen到当前进程地址空间。那么hidl服务的Tranport类型是如何得到的呢? ...

2018-04-09 16:18:30 3864

原创 AndroidO Treble架构下hwservicemanager启动过程

hwservicemanager是hidl服务管理中心,负责管理系统中的所有hidl服务,由init进程启动。service hwservicemanager /system/bin/hwservicemanager user system disabled group system readproc critical onrestart setprop h...

2018-04-09 15:48:42 11205

原创 AndroidO Treble架构下Binder对象的转换过程

上文中详细分析了Hal的整个启动过程,这里将补充上文中没有详细分析的Binder对象转换过程,下图为hidl服务的完整注册过程:1. HwcHal继承于IBase类,是对hw_module_t的封装,该对象位于Hal进程空间;2. 通过hwservicemanager的binder代理将HwcHal对象注册到hwservicemanager进程空间;3. 在IPC调用过程中,HwcHal对象的...

2018-04-09 14:17:17 3191 2

原创 AndroidO Treble架构下Hal进程启动及HIDL服务注册过程

通过前面对Treble架构的介绍,我们知道,Android Framework进程和Hal分离,每个Hal独立运行在自己的进程地址空间,那么这些Hal进程是如何启动的呢?本文以composer hal为例展开分析。在以下路径有composer hal的rc启动脚本:hardware/interfaces/graphics/composer/2.1/default/android.hardware....

2018-04-09 10:46:59 33055 4

原创 AndroidO Treble架构下的接口文件编译

HIDL是一种接口定义语言,描述了HAL和它的用户之间的接口。同aidi类似,我们只需要为hal定义相关接口,然后通过hidl-gen工具即可自动编译生成对应的C++或者java源文件,定义hal接口的文件命名为xxx.hal,为了编译这些.hal文件,需要编写相应的Android.bp或者Android.mk文件:1. Android.bp文件用于编译C++;2. Android.mk文件用于编...

2018-04-07 13:35:44 4501 3

原创 AndroidO Treble架构下的变化

AndroidO引入Treble架构后,有那些变化呢?1. 增加了多个服务管家,AndroidO之前版本有且只有一个servicemanager,现在增加到3个,他们分管不同的服务。2.增加了binder通信库,这是为了适配binder域的扩展。3.增加了binder域,系统定义了3个binder设备节点,binder驱动分别处理这3个binder设备节点上的binder通信事件。Binder通信...

2018-04-06 20:24:34 4792 1

原创 AndroidO Treble架构分析

从AndroidO开始,google引入了Treble架构,目的是为了方便系统升级,将oem定制的东西和Framework分离。AndroidO之前的版本:在此之前的Android系统架构当中,Android Framework与Android HAL是打包成一个system.img的,而且Framework与HAL之间是紧耦合的,通过链接的方式使用相应的硬件相关so库。老版本的android 的...

2018-04-06 19:40:49 7148

原创 GitHub 优秀的 Android 开源项目

主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableView、Activity Animation等等。  一、ListView android-pulltorefresh

2015-01-15 08:28:37 3400 3

转载 Android应用程序权限管理

在Android源码frameworks/base/api/current.txt中定义了所有应用程序所需的权限访问登记属性android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限获取错略位置android.permission.ACCESS_COARSE_L

2015-01-05 10:09:49 11462

原创 Ubuntu Vim配置

ctags的搭建与使用1.下载源码包:http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz2.解压 tar zxvfctags-5.8.tar.gz3.配置 ./configure4.make5.make install6.进入kernel目录,执行ctags -R *,“-R”表示递

2014-12-31 14:39:18 1647

原创 ubuntu安装搜狗输入法

ubuntu安装搜狗输入法sudo apt-add-repository ppa:fcitx-team/nightly #添加源sudo apt-get update #更新源sudo apt-get remove fcitx* #如果以前安装过fcitx,需要将其删除(可以输入

2014-12-31 09:00:16 1452 1

原创 在 Ubuntu 上使用 sshfs 映射远程 ssh 文件系统为本地磁盘

install sshfssudo apt-get install sshfssudo modprobe fusesudo adduser apuser fusesudo chown root:fuse /dev/fuseNow, assuming that you have an SSH server running on a remote machine, simply run

2014-12-31 08:58:30 1660

原创 Linux shell 之特殊变量

$$   Shell本身的PID(ProcessID)$!   Shell最后运行的后台Process的PID$?   最后运行的命令的结束代码(返回值)$-   用Set命令设定的Flag一览$*   有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。$@   传给脚本的所有参数的列表$#   传递给该shell脚本的参数个数$

2014-11-21 13:07:26 969

原创 Linux shell 之比较判断

整数比较 -eq       等于,如:if [ "$a" -eq "$b" ] -ne       不等于,如:if [ "$a" -ne "$b" ] -gt       大于,如:if [ "$a" -gt "$b" ] -ge       大于等于,如:if [ "$a" -ge "$b" ] -lt       小于,如:if [ "$a" -lt "$b"

2014-11-21 12:57:07 893

原创 Linux shell之数组使用

1.数组定义:a=(1 2 3 4 5)2.数组引用:${a[@]}3.数组长度:${#a[@]}4.打印数组:echo ${a[*]}5.数组元素引用:${a[2]} 用${数组名[下标]} 下标是从0开始  下标是:*或者@ 得到整个数组内容6.数组元素赋值:a[1]=100 直接通过数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

2014-11-21 12:54:59 1118

原创 深入剖析Android音频之AudioTrack

播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。而AudioTrack只能播放已经解码的PCM流,如果是文件的话只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。AudioTrack不创建解码器,所以只能

2014-10-11 11:05:14 35892 2

原创 深入剖析Android音频之AudioSystem

AudioSystem是AudioPolicyService和AudioFlinger对外提供接口类。

2014-10-11 09:41:11 5151

原创 Android系统Choreographer机制实现过程

在Android4.1之后增加了Choreographer机制,用于同Vsync机制配合,实现统一调度界面绘图.Choreographer构造过程frameworks\base\core\java\android\view\Choreographer.javapublic static Choreographer getInstance() { return sThreadInsta

2014-09-24 09:12:15 23976 7

原创 Android系统Audio框架介绍

音频基础知识声音有哪些重要属性呢?响度(Loudness)响度就是人类可以感知到的各种声音的大小,也就是音量。响度与声波的振幅有直接关系。音调(Pitch)音调与声音的频率有关系,当声音的频率越大时,人耳所感知到的音调就越高,否则就越低。音色(Quality)同一种乐器,使用不同的材质来制作,所表现出来的音色效果是不一样的,这是由物体本身的结构特性所决定的。

2014-09-24 08:49:49 40411 12

原创 深入剖析Android音频之AudioPolicyService

AudioPolicyService是策略的制定者,比如什么时候打开音频接口设备、某种Stream类型的音频对应什么设备等等。而AudioFlinger则是策略的执行者,例如具体如何与音频设备通信,如何维护现有系统中的音频设备,以及多个音频流的混音如何处理等等都得由它来完成。AudioPolicyService根据用户配置来指导AudioFlinger加载设备接口,起到路由功能。

2014-09-23 16:36:22 30939 4

原创 Android debuggerd 源码分析

debuggerd 简介Android系统自带一个实用的程序异常退出的诊断daemon debuggerd。此进程可以侦测到程序崩溃,并将崩溃时的进程状态信息输出到文件和串口中,以供开发人员分析调试使用。Debuggerd的数据被保存在/data/tombstone/目录下,共可保存10个文件,当超过10个时,会覆盖重写最早生产的文件。串口中,则直接用DEBUG的tag,输出logcat信息。

2014-08-06 11:16:28 16154 6

原创 Android文件监控FileObserver介绍

在前面的Linux文件系统Inotify机制 中介绍了Linux对文件变更监控过程。Android系统在此基础上封装了一个FileObserver类来方便使用Inotify机制。FileObserver是一个抽象类,需要定义子类实现该类的onEvent抽象方法,当被监控的文件或者目录发生变更事件时,将回调FileObserver的onEvent()函数来处理文件或目录的变更事件。

2014-07-02 12:13:25 6401

原创 Android应用程序窗口设计框架介绍

在Android系统中,一个Activity对应一个应用程序窗口,任何一个Activity的启动都是由AMS服务和应用程序进程相互配合来完成的。AMS服务统一调度系统中所有进程的Activity启动,而每个Activity的启动过程则由其所属进程来完成。AMS服务通过realStartActivityLocked函数来通知应用程序进程启动某个Activity

2014-07-01 19:47:43 11333 12

原创 Android显示系统设计框架介绍

1. Linux内核提供了统一的framebuffer显示驱动,设备节点/dev/graphics/fb*或者/dev/fb*,以fb0表示第一个显示屏,当前实现中只用到了一个显示屏。2. Android的HAL层提供了Gralloc,分为fb和gralloc两个设备。设备fb负责打开内核中的framebuffer以及提供post、setSwapInterval等操作,设备gralloc则负责

2014-04-02 08:32:22 29620 7

原创 Android中集成第三方软件包

1.编译一个简单的APKLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# Build all java files in the java subdirectoryLOCAL_SRC_FILES := $(call all-subdir-java-files)# Build all java files in srcLOCAL_

2014-03-19 20:04:01 2035

原创 Android 应用程序建立与WMS服务之间的通信过程

我们知道WindowManagerService服务运行在SystemServer进程中,应用程序启动Activity时,需要请求WMS为启动的Activity创建对应的窗口,同时WMS也负责修改窗口属性,因此这里就涉及到应用程序进程与WMS服务之间的跨进程交互过程。在前面我们介绍了Android中的Binder通信机制,应用程序进程正是使用Binder通信方式和SystemServer进程交互的

2014-01-24 16:51:35 7886 2

原创 Android ART虚拟机

Android 4.4提供了一种与Dalvik截然不同的运行环境ART(Android runtime)支持,ART源于google收购的Flexycore的公司。ART模式与Dalvik模式最大的不同在于,启用ART模式后,系统在安装应用的时候会进行一次预编译,将字节码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升。虚拟机切换设置Settings

2014-01-17 17:17:35 6763 3

原创 Android PreferenceActivity使用

PreferenceActivity继承了ListActivity,定义Activity继承PreferenceActivity。在res目录下新建一个xml文件夹,接着在这个文件夹下新建一个取名为preferences.xml的File文件,xml中可以使用的标签(Tag)可以分为两类,一类是管理布局的显示,如PreferenceScreen;另一类是内容设置标签,如CheckBoxPrefer

2014-01-03 10:58:01 5416

原创 Android ListView实现方法三(自定义适配器)

public abstract class ArrayListAdapter extends BaseAdapter { protected List mListData; protected Context mContext; public ArrayListAdapter(Context context){ this.mContext = context; } pu

2014-01-02 16:13:34 1169

原创 Android ListView实现方法二

Screen LayoutListActivity has a default layout that consists of a single, full-screen list in the center of the screen. However, if you desire, you can customize the screen layout by setting your

2014-01-02 15:48:29 1109

原创 Android ListView实现方法一(ListActivity)

继承ListActivity就可以不用setContentView,Android也会自动帮我们构造出一个全屏的列表。public class SettingActivity extends ListActivity { private static String[] allTest = new String[]{ "CPU测试", "LCD测试", "Battery

2014-01-02 15:44:08 1156

原创 Android 应用程序进程启动过程源码分析

在Zygote进程启动过程的源代码分析一文中介绍到,Zygote是java世界的开创者,所有的java应用进程都是通过Zygote孵化出来的。我们知道在Android应用程序框架层中,ActivityManagerService组件负责管理Android应用程序的创建,ActivityManagerService也是运行在独立的进程SystemServer中,SystemServer进程启动过程源

2013-12-11 12:39:40 7196 5

原创 SystemServer进程启动过程源码分析

在上一篇文中介绍了Zygote进程的启动过程,我们知道,Zygote进程是Android Java世界的开创者,所有的Java应用程序进程都由Zygote进程创建。Zygote创建应用程序进程过程其实就是复制自身进程地址空间作为应用程序进程的地址空间,因此在Zygote进程中加载的类和资源都可以共享给所有由Zygote进程孵化的应用程序,应用程序进程只需加载自身私有资源就可以正常运行,Zygote进程是所有Android Java应用程序进程的父进程,Zygote进程和普通应用程序进程之间的关系正是面向对象

2013-12-11 12:32:52 6616 2

原创 Zygote进程启动过程源代码分析

Android系统借用Binder通信机制实现了C/S架构设计,客户端应用程序如需要实现某些功能,只需请求指定的服务,由服务端来实现。Android服务包括以上的系统服务和应用服务,系统服务是指Android系统在启动过程就已经启动实现了的服务,对于系统服务又分为Java服务和本地服务,其实很好区分,Java服务是由Java代码编写而成,由SystemServer进程提供,而本地服务是由C/C++实现的服务,由Init进程在系统启动时启动的服务。应用服务是由开发者自行实现的某些特定服务。对于本地系统服务,我

2013-12-11 08:55:37 7982 5

原创 Android服务启动之StartService源码分析

在编写Android应用程序时,我们一般将比较耗时的操作放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验。Android系统为我们提供了一个Service类,我们可以实现一个以Service为基类的服务子类,在里面实现自己的计算型逻辑,然后在主进程通过startService函数来启动这个服务。在本文中,将详细分析应用程序进程是如何通过startService函数来启动自定义服务的。

2013-12-10 16:41:58 8974 1

原创 Android上下文服务管理查询过程

在开发Android应用程序时,如果需要使用系统提供的服务,可以通过服务名称调用山下文的getSystemService(String name)来获取服务管理者,那么该函数是如何实现服务查询的呢?frameworks\base\core\java\android\app\ContextImpl.javapublic Object getSystemService(String nam

2013-12-05 16:34:59 2452

客户端登录

基本完成常用的客户端登录界面布局,仿qq登录,微薄客户端登录等,方便用户开发

2013-09-03

Android下拉刷新实现一源码

Android下拉刷新实现一。使用组合View的方式,先自定义一个布局继承自LinearLayout,然后在这个布局中加入下拉头和ListView这两个子元素,并让这两个子元素纵向排列。初始化的时候,让下拉头向上偏移出屏幕,这样我们看到的就只有ListView了。然后对ListView的touch事件进行监听,如果当前ListView已经滚动到顶部并且手指还在向下拉的话,那就将下拉头显示出来,松手后进行刷新操作,并将下拉头隐藏。

2013-09-03

空空如也

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

TA关注的人

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