Android研究
文章平均质量分 77
山庄来客
这个作者很懒,什么都没留下…
展开
-
Android日志系统分析之日志设备驱动程序代码阅读
<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->android日志系统中定义了设备驱动的实现代码位于kernel/common/drivers/staging/android/logger原创 2011-09-18 19:42:04 · 1936 阅读 · 0 评论 -
基于Message的线程间通信实例
在Android应用程序中,经常使用Handler进行消息原创 2014-09-28 22:57:11 · 1191 阅读 · 0 评论 -
Binder结点管理
在Binder驱动中,Binder结点随着进程IPC通信开始而生,随着进程IPC通信结束而亡,换句话说,Binder结点是维系IPC通信的基础,而且一个Binder结点也只能在完全无IPC通信的情况下被删除。本文将重点研究Binder结点从生到死的过程。Binder结点作为IPC通信过程中的实体,是IPC通信的媒介。在描述一个进程中Binder信息的数据结构中,与结点相关的成员变量有:原创 2014-10-26 17:01:49 · 1480 阅读 · 0 评论 -
Binder通信相关的类简要分析
一、BpBinder这个类通常作为IPC通信的Client端,或者说Remote端,提供实际的IPC基础通信服务。在代码中通常不直接使用到该类,一般以成员变量的形式,包含于BpRefBase类中,通过remote()方法引用该成员变量。继承关系如下: BpXXX --> BpInterface --> BpRefBase 在BpXXX方法中,就可以直接通过remote()方法引原创 2014-10-26 14:20:55 · 945 阅读 · 0 评论 -
Android Region代码分析
一、Region的定义和合法性检查在Android系统中,定义了Region的概念,它代表屏幕上的一个区域,它是由一个或多个Rect组成的,代码位于frameworks/native/libs/ui/Region.cpp。而Rect则代表屏幕上的一个方形区域,这个区域可能是不可见的,部分可见或者完全不可见的。从代码实现的角度来看Region的实现,它拥有一个私有的数据成员变量:mStorage原创 2014-05-11 16:57:46 · 11314 阅读 · 3 评论 -
Android非APK程序开发流程
本文所说的非APK程序,是区别于一般的Android应用程序。这里说的非APK程序是指一个Android库项目,生成的Jar包包含一个有main入口的Java类,能够独立运行。许多Android平台上用Java语言实现的命令即是属于此种类型。 1. 创建一个Android库项目 执行如下命令,创建一个工程: create lib-project -原创 2015-01-16 15:45:32 · 877 阅读 · 0 评论 -
Problem 68. Android Low memory killer?
Problem68. Android Low memory killer?Ans: #defineOOM_SCORE_ADJ_MIN (-1000)#defineOOM_SCORE_ADJ_MAX 1000当/proc//oom_score_adj的值设为OOM_SCORE_ADJ_MIN时,将关闭对该进程的oom killing机制。 #defineOOM_D原创 2015-02-15 12:18:25 · 712 阅读 · 0 评论 -
VSync事件处理流程分析(Android4.3)
我们先看收到VSync事件是如何处理的,再看底层是怎样向上层通知VSync事件。原创 2014-11-23 16:16:44 · 6985 阅读 · 3 评论 -
Service Manger的初始化分析
在init.rc文件中,有定义serviceservicemanager /system/bin/servicemanager,在系统初始化会解析init.rc文件时,遇到这句话,将会把servicemanager加载到服务启动列表中,同时它也是第一个启动的服务。 ServiceManager的相关代码位于frameworks/native/cmds/servicemanage原创 2014-02-27 17:29:43 · 1426 阅读 · 0 评论 -
Problem 69 孤儿进程组?
Problem 69 孤儿进程组?Ans: 一个进程组被认为是一个孤儿进程组时,则说明它的任何一个成员进程都没有一个处于相同会话中但在不同进程组的父进程(按句话说:该组中每个成员的父进程要么是该组的一个成员,要么不是该组所属会话的成员。)。位于孤儿进程组之外的进程不能监控該孤儿进程组中的任何已经处于停止状态的进程,同时也不能向这些处于停止状态的进程发送SIGCONT信号,使得这些处于原创 2015-03-16 23:00:09 · 1006 阅读 · 0 评论 -
基于Message的进程间通信实例
1. 前言 前面已经讨论过原创 2014-10-11 22:06:47 · 1772 阅读 · 0 评论 -
Android 4.4对VSync机制的一个改进
在Android4.4中,VSync机制的实现进行了一些修改,但是总体过程还是一样:1. HWComposer将底层硬件产生的VSync报告给SurfaceFlinger2. SurfaceFlinger将VSync又通知给EventThread线程。3. EventThread收到VSync事件后,调用相应的回调函数。 主要的修改有如下几点:1. 引入了VSync Eve原创 2015-03-11 21:48:43 · 4195 阅读 · 0 评论 -
蓝牙代码基本结构分析
蓝牙代码总体结构分析在Android框架代码中,有两个重要接口IBluetooth和IBluetoothManager。 这两个接口之间的类图关系如下: 总体来讲,对于应用程序通过BluetoothManager和BluetoothAdapter来操作蓝牙相关接口。 其中IBluetoothManager定义了如下一些接口:interface IBluetoothManager{原创 2015-05-30 11:48:01 · 4097 阅读 · 0 评论 -
Android Sync Framework
Fence提出的原因如下:在复杂的DMA管线如图形管线(多媒体,摄像头,GPU以及显示设备),一个buffer的消费者需要知道生产者什么时候完成生产(即创建一个Buffer,并像里面放置消费者所需要的数据)。同样地,生产者也需要知道消费者什么时候使完它创建的Buffer,以便它可以重新使用这个Buffer。一个Buffer可能被多个不同的消费者使用不同的时间。另外,一个消费者可能需要互原创 2015-03-22 21:51:50 · 7066 阅读 · 1 评论 -
Binder结点死亡通知过程
BpBinder类代表一个远程Binder对象(继承自BpRefBase)的通信功能部分。它提供了linkToDeath方法,供其他对象监听自己所关联的本地结点的死亡通知,本质上是通过调用IPCThreadState类的requestDeathNotification接口。unlinkToDeath方法则是取消接收Binder结点的死亡通知。而sendObituary则是向监听者发送结点的死亡通知原创 2014-09-28 22:24:56 · 6160 阅读 · 1 评论 -
Binder通信过程中的用户空间线程池的管理
在Binder通信机制里,客户端与服务端之间的通信是在专门的IPC通信线程中进行的。这些线程构成一个线程池。线程的创建和销毁是在用户空间进行的,而对线程的控制是在驱动层进行的,即驱动控制线程池中线程的生命,而线程本身则是运行在用户空间的。驱动层是通过BR_SPAWN_LOOPER向用户空间发送创建新线程的命令。线程池的大小可以设置。默认情况下,线程池只有一个主线程,它在进程生命周期期间是不会退原创 2014-05-30 21:12:29 · 9450 阅读 · 10 评论 -
Android日志系统分析之开篇
<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->在android系统中, 提供了一个轻量级的日志系统。该日志系统基于在内核中实现的一个字符设备驱动logger(misc字符设备驱动)。通过该字原创 2011-09-18 19:36:37 · 2757 阅读 · 0 评论 -
Android消息广播的使用
在Android中,一些设备通过广播的形式向应用程序传递一些状态信息,常见的如USB热挺拔广播信息。在Andoid应用程序中,使用消息广播机制非常简单,只要在Activity中注册感兴趣的广播信息,并添加相应的处理捕获的广播信息的代码即可。首先,我们新建一个广播消息接收器: private AlertDialog mAlertDialog = null; private Broadcas原创 2013-03-18 19:17:30 · 5163 阅读 · 0 评论 -
基于textureview编写opengl程序
与SurfaceView相比,TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等。另外,Textureview必须在硬件加速开启的窗口中。下面的例子演示了通过TextureView来创建一个opengl程序。基于TextureView的程序,我们需要实现TextureView.SurfaceTexture原创 2013-05-15 18:11:14 · 9802 阅读 · 1 评论 -
编写android服务
服务(Service)是Android的四大组件之一,它利用底层Binder机制,实现了RPC机制。 一个服务即可以存在于一个独立的进程,也可以依附于已存在的某个进程中。服务可被同一进程中的Activity调用,也可以被位于不同进程中的某个Activity调用。 本文主要探讨怎样编写一个远程服务接口的过程。为演示作用,本文不介绍通过AIDL语言自动生成服务接口代码的过程。首先,我们定义接口:原创 2014-02-23 16:46:19 · 960 阅读 · 0 评论 -
Android API Demo程序框架
前言 android API Demo程序主要演示了Android常见API的使用方法, 本文将该程序的框架提取出来, 以作为自己研究和学习Android编程的一个示例收集框架,即将所有自己研究过的例子按照分类收集起来, 方便日后查找。 正文 下面只贴出框架相关的文件内容, 最后说明如果将自己的例子加入到框架中。 框架的工程的源码目录结构如下:核心包原创 2012-02-16 19:55:11 · 2593 阅读 · 0 评论 -
Zygote启动分析
基于性能的考虑,Dalvik虚拟机只启动一次,新的实例将从第一次启动的Dalvik中拷贝。这个功能是通过系统服务Zygote来实现的。 Zygote的启动过程简述如下:首先,它预初始化和预加载通用的Android类到它的堆中。然后,它监听在Socket端口上,等待启动一个新的Android应用程序的命令。当接收到一个启动应用程序命令,它将利用已经加载的应用程序fork出一个新的进程。该进程原创 2014-03-30 10:41:12 · 851 阅读 · 0 评论 -
Android系统初始化过程分析(Android 4.3)
在内核初始化完成后,最后会启动第一个用户空间进程,路径名为/init,它对应的代码是在/system/core/init/init.c。下面将从main函数开始一步步分析其中的执行过程。 if (!strcmp(basename(argv[0]), "ueventd")) return ueventd_main(argc, argv);原创 2014-03-30 10:44:55 · 3023 阅读 · 0 评论 -
Android Looper类代码分析
本文将分析一下Looper类的实现及其应用,代码位于frameworks/native/lib/utils/Looper.cpp。主要分为如下几个部分:1. epoll系统调用接口简介2. Looper类代码分析3. Looper类应用实例分析原创 2014-07-22 23:12:22 · 5797 阅读 · 1 评论 -
binder IPC TRANSACTION过程分析(BC_TRANSACTION->Binder Driver)
在Binder IPC通信过程中,进程间通过原创 2014-04-06 15:50:55 · 5003 阅读 · 1 评论 -
ASyncChannel类分析
AsyncChannel类源码简要分析概述 这个类提供了两个Handler之间进行异常通常的机制。这两个Handler可能位于同一进程中,也可能位于不同的进程中。目前,ASyncChannel可以使用两种协议方式:一对多的通信方式(简单的请求与应答方式) 在此种交互方式下,服务器端并不知道请求来自哪个客户端。客户端(发送方)将请求发送给服务器(接收方),服务器则通过replayToMessage方原创 2015-04-12 18:03:28 · 1922 阅读 · 0 评论