自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老罗的Android之旅

爱生活,爱Android

  • 博客(187)
  • 资源 (18)
  • 收藏
  • 关注

原创 Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析

在前两文中,我们分析了Activity组件的窗口对象和视图对象的创建过程。Activity组件在其窗口对象和视图对象创建完成之后,就会请求与WindowManagerService建立一个连接,即请求WindowManagerService为其增加一个WindowState对象,用来描述它的窗口状态。在本文中,我们就详细分析Activity组件与WindowManagerService的连接过程。

2012-12-17 00:57:11 64903 44

原创 Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

从前文可知道,每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的。在本文中,我们就详细分析应用程序窗口视图的创建过程。

2012-12-10 00:55:28 84152 38

原创 Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程。由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口。由此又可知,Activity只不过是一个高度抽象的UI组件,它的具体UI实现其实是由其它的一系列对象来实现的。在本文中,我们就将详细分析Android应用程序窗口对象的创建过程。

2012-12-03 00:55:54 74786 33

原创 Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析

在前文中,我们简要介绍了Android应用程序窗口的框架。Android应用程序窗口在运行的过程中,需要访问一些特定的资源或者类。这些特定的资源或者类构成了Android应用程序的运行上下文环境,Android应用程序窗口可以通过一个Context接口来访问它,这个Context接口也是我们在开发应用程序时经常碰到的。在本文中,我们就将详细分析Android应用程序窗口的运行上下文环境的创建过程。

2012-11-26 00:55:58 62245 37

原创 Android应用程序窗口(Activity)实现框架简要介绍和学习计划

前面我们学习了SurfaceFlinger服务的实现原理。有了这个基础之后,从本文开始,我们就可以分析Android系统在Java层的UI实现了。我们知道,在Android应用程序的四大组件中,只有Activity组件与UI相关,它描述的是应用程序窗口,因此,我们就通过它的UI实现来分析Android系统在Java层的UI实现。本文主要是对Activity组件的UI实现作简要介绍以及制定学习计划。

2012-11-19 00:56:14 88031 42

原创 Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析

在前面的一系列文章中,我们学习了Android应用程序与SurfaceFlinger服务的关系,以及SurfaceFlinger服务的启动过程、初始化硬件帧缓冲区的过程、线程模型。SurfaceFlinger服务所做的一切都是为了给Android应用程序提服务的,即为Android应用程序渲染它们的UI。在本文中,我们就详细分析SurfaceFlinger服务渲染Android应用程序UI的过程。

2012-11-05 00:59:47 54565 52

原创 Android系统Surface机制的SurfaceFlinger服务的线程模型分析

在前面两篇文章中,我们分析了SurfaceFlinger服务的启动过程以及SurfaceFlinger服务初始化硬件帧缓冲区的过程。从这两个过程可以知道,SurfaceFlinger服务在启动的过程中,一共涉及到了三种类型的线程,它们分别是Binder线程、UI渲染线程和控制台事件监控线程。在本文中,我们就将详细分SurfaceFlinger服务的线程模型,即上述三种类型的线程是如何运行和交互的。

2012-10-22 00:55:49 39483 24

原创 Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析

在前文中,我们分析了SurfaceFlinger服务的启动过程。SurfaceFlinger服务在启动的过程中,会对系统的硬件帧缓冲区进行初始化。由于系统的硬件帧缓冲区一般只有一个,并且不是谁都可以随便访问的,因此,它就需要由一个服务来统一管理。在Android系统中,这个服务便是SurfaceFlinger。在本文中,我们就详细分析SurfaceFlinger服务是如何管理系统的硬件帧缓冲区的。

2012-10-15 00:56:03 64370 52

原创 Android系统Surface机制的SurfaceFlinger服务的启动过程分析

在前面一篇文章中,我们简要介绍了Android系统Surface机制中的SurfaceFlinger服务。SurfaceFlinger服务是在System进程中启动的,并且负责统一管理设备的帧缓冲区。SurfaceFlinger服务在启动的过程中,会创建两个线程,其中一个线程用来监控控制台事件,而另外一个线程用来渲染系统的UI。在本文中,我们就将详细分析SurfaceFlinger服务的启动过程。

2012-09-29 14:48:05 55260 11

原创 Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了SurfaceFlinger服务。有了这些预备知识之后,我们就可以从正面来分析SurfaceFlinger服务的实现原理了。SurfaceFlinger服务负责管理系统的帧缓冲区设备,并且负责渲染系统的UI,即各个应用程序的UI。在本文中,我们就简要介绍SurfaceFlinger服务,并且制定学习计划。

2012-09-26 00:55:32 70973 12

原创 Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析

在前面一篇文章中,我们分析了Android应用程序请求SurfaceFlinger服务创建Surface的过程。有了Surface之后,Android应用程序就可以在上面绘制自己的UI了,接着再请求SurfaceFlinger服务将这个已经绘制好了UI的Surface渲染到设备显示屏上去。在本文中,我们就将详细分析Android应用程序请求SurfaceFlinger服务渲染Surface的过程。

2012-09-17 00:56:30 62214 37

原创 Android应用程序请求SurfaceFlinger服务创建Surface的过程分析

前面我们已经学习过Android应用程序与SurfaceFlinger服务的连接过程了。连接上SurfaceFlinger服务之后,Android应用程序就可以请求SurfaceFlinger服务创建Surface。而当有了Surface后,Android应用程序就可以用来渲染自己的UI了。在本文中,我们将详细分析Android应用程序请求SurfaceFlinger服务创建Surface的过程。

2012-09-03 01:01:50 54141 36

原创 Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析

在前面一篇文章中,我们分析了Android应用程序与SurfaceFlinger服务的连接过程。Android应用程序成功连接上SurfaceFlinger服务之后,还需要一块匿名共享内存来和SurfaceFlinger服务共享它的UI元数据,以便使得SurfaceFlinger服务可以正确地为它创建以及渲染Surface。在本文中,我们将详细地分析这块用来保存UI元数据的匿名共享内存的创建过程。

2012-08-27 00:56:32 39599 16

原创 Android应用程序与SurfaceFlinger服务的连接过程分析

前文在描述Android应用程序和SurfaceFlinger服务的关系时提到,每一个有UI的Android应用程序都需要与SurfaceFlinger服务建立一个连接,以便可以通过这个连接来请求SurfaceFlinger服务为它创建和渲染Surface。在本文中,我们将以Android系统的开机动画应用程序为例,详细描述Android应用程序是如何与SurfaceFlinger服务建立连接的。

2012-08-20 00:56:40 57767 30

原创 Android应用程序与SurfaceFlinger服务的关系概述和学习计划

SurfaceFlinger服务负责绘制Android应用程序的UI,它的实现相当复杂,要从正面分析它的实现不是一件容易的事。既然不能从正面分析,我们就想办法从侧面分析。说到底,无论SurfaceFlinger服务有多复杂,它都是为Android应用程序服务的,因此,我们就从Android应用程序与SurfaceFlinger服务的关系入手,来概述和制定SurfaceFlinger服务的学习计划。

2012-08-13 00:56:22 125360 67

原创 Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析

前面在介绍Android系统的开机画面时提到,Android设备的显示屏被抽象为一个帧缓冲区,而Android系统中的SurfaceFlinger服务就是通过向这个帧缓冲区写入内容来绘制应用程序的用户界面的。Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作。本文将详细分析Gralloc模块的实现,为后续分析SurfaceFlinger服务的实现打下基础。

2012-07-23 01:25:57 94203 47

原创 Android系统的开机画面显示过程分析

好几个月都没有更新过博客了,从今天开始,老罗将尝试对Android系统的UI实现作一个系统的分析,也算是落实之前所作出的承诺。提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了。Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段。本文将详细分析这三个开机画面的显示过程,以便可以开启我们对Android系统UI实现的分析之路。

2012-07-09 00:56:40 164673 146

原创 Android应用程序组件Content Provider的共享数据更新通知机制分析

在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的。关于数据共享的另一个话题便是数据更新通知机制了,即如果一个应用程序对共享数据做了修改,它应该如何通知其它正在使用这些共享数据的应用程序呢?本文将分析Content Provider的共享数据更新通知机制,为读者解答这个问题。

2011-12-12 00:58:37 48712 31

原创 Android应用程序组件Content Provider在应用程序之间共享数据的原理分析

在Android系统中,不同的应用程序是不能直接读写对方的数据文件的,如果它们想共享数据的话,只能通过Content Provider组件来实现。那么,Content Provider组件又是如何突破应用程序边界权限控制来实现在不同的应用程序之间共享数据的呢?在前面的文章中,我们已经简要介绍过它是通过Binder进程间通信机制以及匿名共享内存机制来实现的,在本文中,我们将详细分析它的数据共享原理。

2011-12-05 01:00:28 49032 17

原创 Android应用程序组件Content Provider的启动过程源代码分析

通过前面的学习,我们知道在Android系统中,Content Provider可以为不同的应用程序访问相同的数据提供统一的入口。Content Provider一般是运行在独立的进程中的,每一个Content Provider在系统中只有一个实例存在,其它应用程序首先要找到这个实例,然后才能访问它的数据。那么,系统中的Content Provider实例是由谁来负责启动的呢?本文将回答这个问题。

2011-11-28 00:58:59 51513 37

原创 Android应用程序组件Content Provider应用实例

上文简要介绍了Android应用程序组件Content Provider在应用程序间共享数据的原理,但是没有进一步研究它的实现。本文将实现两个应用程序,其中一个以Content Provider的形式来提供数据访问入口,另一个通过这个Content Provider来访问这些数据。本文的例子不仅可以为下文分析Content Provider的实现原理准备好使用情景,还可以学习到它的一个未公开接口。

2011-11-21 00:58:44 88610 59

原创 Android应用程序组件Content Provider简要介绍和学习计划

在Android系统中,Content Provider作为应用程序四大组件之一,它起到在应用程序之间共享数据的作用,同时,它还是标准的数据访问接口。前面的一系列文章已经分析过Android应用程序的其它三大组件(Activity、Service和Broadcast Receiver)了,本文将简要介绍Content Provider组件在Android应用程序设计中的地位,为进一步学习打好基础。

2011-11-14 01:03:13 53992 16

原创 Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析

在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享数据的机制:匿名共享内存,它能够辅助内存管理系统来有效地管理内存,它的实现原理我们在前面已经分析过了。为了方便使用匿名共享内存机制,系统还提供了Java调用接口(MemoryFile)和C++调用接口(MemoryHeapBase、MemoryBase),Java接口在前面也已经分析过了,本文中将继续分析它的C++接口。

2011-11-07 00:58:05 46016 23

原创 Android应用程序线程消息循环模型分析

我们知道,Android应用程序是通过消息来驱动的,即在应用程序的主线程(UI线程)中有一个消息循环,负责处理消息队列中的消息。我们也知道,Android应用程序是支持多线程的,即可以创建子线程来执行一些计算型的任务,那么,这些子线程能不能像应用程序的主线程一样具有消息循环呢?这些子线程又能不能往应用程序的主线程中发送消息呢?本文将分析Android应用程序线程消息处理模型,为读者解答这两个问题

2011-10-31 01:00:01 45387 44

原创 Android应用程序键盘(Keyboard)消息处理机制分析

在Android系统中,键盘按键事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序处理,不过和普通消息不一样,它是由硬件中断触发的;在上一篇文章《Android应用程序消息处理机制(Looper、Handler)分析》中,我们分析了Android应用程序的消息处理机制,本文将结合这种消息处理机制来详细分析Android应用程序是如何获得键盘按键消息的。

2011-10-24 00:59:47 144485 190

原创 Android应用程序消息处理机制(Looper、Handler)分析

Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队例,应用程序的主线程不断地从这个消息队例中获取消息(Looper),然后对这些消息进行处理(Handler),这样就实现了通过消息来驱动应用程序的执行,本文将详细分析Android应用程序的消息处理机制。        前面我们学习Android应用程序中的Activity启动(Android应用程序启动过程源代码分析和A

2011-09-29 00:58:04 115660 107

原创 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析

Android系统的运行时库层代码是用C++来编写的,用C++来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃。不过系统为我们提供了智能指针,避免出现上述问题,本文将系统地分析Android系统智能指针(轻量级指针、强指针和弱指针)的实现原理。        在使用C++来编写代码的过程中,指针使用不当造成内存泄漏一般就是因为new了一个对象并且使用完之后,忘记

2011-09-23 00:59:13 105312 68

原创 Android系统进程Zygote启动过程的源代码分析

在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育(fork)出来的,这也许就是为什么要把它称为Zygote(受精卵)的原因吧。由于Zygote进程在Android系统中有着如此重要的地位,本文将详细分析它的启动过程。        在前面一篇文章Android应用程序进程启动过程的源代码分析中,我们看到了,当ActivityManager

2011-09-19 00:59:08 125439 44

原创 Android系统默认Home应用程序(Launcher)的启动过程源代码分析

在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应用程序就是Launcher了,本文将详细分析Launcher应用程序的启动过程。        Android系统的Home应用程序Launcher是由ActivityManagerService启动

2011-09-16 00:58:48 120816 62

原创 Android应用程序安装过程源代码分析

Android系统在启动的过程中,会启动一个应用程序管理服务PackageManagerService,这个服务负责扫描系统中特定的目录,找到里面的应用程序文件,即以Apk为后缀的文件,然后对这些文件进解析,得到应用程序的相关信息,完成应用程序的安装过程,本文将详细分析这个过程。        应用程序管理服务PackageManagerService安装应用程序的过程,其实就是解析析应用程序配置

2011-09-14 00:59:22 109857 97

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

Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制;这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程创建过程中是如何实现这两个特点的。        Android应用程序框架层创建的应用程序进程的入口函数是ActivityThread.main比较好理

2011-09-09 01:01:32 104497 50

原创 Android应用程序绑定服务(bindService)的过程源代码分析

Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部启动;前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部绑定Service的过程,这是一种在应用程序进程内部启动Service的方法。        在前面一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划中,我们就曾经提到,在A

2011-09-07 00:57:45 75552 76

原创 Android应用程序发送广播(sendBroadcast)的过程分析

前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来。ActivityManagerService是如何得到广播并把它分发出去的呢?这就是本文要介绍的广播发送过程了。        广播的发送过程比广播接收器的注册过程要复杂得多了,不过这个过程仍然是以ActivityManagerSe

2011-09-05 01:01:18 158812 47

原创 Android应用程序注册广播接收器(registerReceiver)的过程分析

前面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制,因此,使用这种消息驱动模型的第一步便是订阅消息;而对Android应用程序来说,订阅消息其实就是注册广播接收器,本文将探讨Android应用程序是如何注册广播接收器以及把广播接收器注册到哪里去的。        在Android的广播机制中,ActivityManagerService扮演着广播中心的角色,负责系统

2011-09-02 01:26:33 155427 37

原创 Android系统中的广播(Broadcast)机制简要介绍和学习计划

在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用;本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备。        在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件

2011-08-31 01:12:32 95621 41

原创 Android应用程序在新的进程中启动新的Activity的方法和过程分析

前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程。        在前面Android进程间通信(IPC)机制Binder简要介绍和学习计划一文中,我们提到,在Andro

2011-08-29 00:59:35 74488 26

原创 解开Android应用程序组件Activity的"singleTask"之谜

在Android应用程序中,可以配置Activity以四种方式来启动,其中最令人迷惑的就是"singleTask"这种方式了,官方文档称以这种方式启动的Activity总是属于一个任务的根Activity。果真如此吗?本文将为你解开Activity的"singleTask"之谜。        在解开这个谜之前,我们先来简单了解一下在Android应用程序中,任务(Task)是个什么样的概念。我们

2011-08-25 01:13:29 108264 46

原创 Android应用程序内部启动Activity过程(startActivity)的源代码分析

上文介绍了Android应用程序的启动过程,即应用程序默认Activity的启动过程,一般来说,这种默认Activity是在新的进程和任务中启动的;本文将继续分析在应用程序内部启动非默认Activity的过程的源代码,这种非默认Activity一般是在原来的进程和任务中启动的。        这里,我们像上一篇文章Android应用程序启动过程源代码分析一样,采用再上一篇文章Android应用程序

2011-08-22 00:57:41 158448 62

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

前文简要介绍了Android应用程序的Activity的启动过程。在Android系统中,应用程序是由Activity组成的,因此,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过程,本文将详细分析应用程序框架层的源代码,了解Android应用程序的启动过程。        在上一篇文章Android应用程序的Activity启动过程简要介绍和学习计划中,我们举例子说明了启动A

2011-08-19 00:58:02 454764 403

原创 Android应用程序的Activity启动过程简要介绍和学习计划

在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。在前面的文章Android进程间通信(IPC)机制Binder简要介绍和学习计划和Android系统在新进程中启动自定义服

2011-08-14 15:46:21 146217 43

Android视频硬解稳定性问题探讨和处理.pdf

分享一种基于多进程架构解决Android MediaCodec Native Crash的方法

2017-07-04

Chromium网页渲染技术

Chromium网页渲染技术,更多信息点击进入:http://0xcc0xcd.com

2017-01-04

Linking:Computer Systems--A Programmer_s Perspective

Linking:Computer Systems--A Programmer_s Perspective

2015-02-28

APK防反编译技术PPT

我们的APK实际上就是一个ZIP压缩文件,里面包含有一个classes.dex,我们编译后生成的程序代码就全部在那里了,通过apktool等工具可以轻松地将它们反编译成smali代码。有了这些反编译出来的smali代码之后,我们就可以轻松地了解别人的APK使用的一些技术或者直接修改别人的APK。由于这些APK反编译工具的存在,我们迫切地希望能有方法去防止别人来反编译我们的APK,从而保护自己的商业机密和利益。

2014-01-27

Android安全机制 PPT版本

Android应用程序是运行在一个沙箱中。这个沙箱是基于Linux内核提供的用户ID(UID)和用户组ID(GID)来实现的。Android应用程序在安装的过程中,安装服务PackageManagerService会为它们分配一个唯一的UID和GID,以及根据应用程序所申请的权限,赋予其它的GID。有了这些UID和GID之后,应用程序就只能限访问特定的文件,一般就是只能访问自己创建的文件。此外,Android应用程序在调用敏感的API时,系统检查它在安装的时候会没有申请相应的权限。如果没有申请的话,那么访问也会被拒绝。对于有root权限的应用程序,则不受上述沙箱限制。此外,有root权限的应用程序,还可以通过Linux的ptrace注入到其它应用程序进程,以及系统进程,进行各种函数调用拦截。

2014-01-27

Android硬件抽象层(HAL)

Android硬件抽象层从开发到使用有一个清晰的层次。这个层次恰好对应了Android系统的架构层次,它向下涉及到Linux内核,向上涉及到应用程序框架层的服务,以及应用程序层对它的使用。Android硬件抽象层模块的开发本身也遵循一定的规范。有了这个规范之后,系统就可以对它进行自动加载,方便上层的使用。这个PPT通过一个具体的实例来分析Android硬件抽象层的开发、测试和使用,它在帮助我们理解Android系统架构的同时,也能教会我们如何在Android源代码环境中开发C/C++代码。

2013-10-23

Android应用程序输入事件处理机制

在Android应用程序中,有一类特殊的消息,是专门负责与用户进行交互的,它们就是触摸屏和键盘等输入事件。触摸屏和键盘事件是统一由系统输入管理器InputManager进行分发的。也就是说,InputManager负责从硬件接收输入事件,然后再将接收到的输入事件分发当前激活的窗口处理。此外,InputManager也能接收模拟的输入事件,用来模拟用户触摸和点击等事件。当前激活的窗口所运行在的线程接收到InputManager分发过来的输入事件之后,会将它们封装成输入消息,然后交给当前获得焦点的控件处理。这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。

2013-10-23

Dalvik虚拟机 PPT版

Android应用程序是运行在Dalvik虚拟机里面的,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。Android应用程序中的Dalvik虚拟机实例实际上是从Zygote进程的地址空间拷贝而来的,这样就可以加快Android应用程序的启动速度。Dalvik虚拟机与Java虚拟机共享有差不多的特性,例如,它们都是解释执行,并且支持即时编译(JIT)、垃圾收集(GC)、Java本地方法调用(JNI)和Java远程调试协议(JDWP)等,差别在于两者执行的指令集是不一样的,并且前者的指令集是基本寄存器的,而后者的指令集是基于堆栈的。这个PPT讲Dalvik虚拟机的内存管理、垃圾收集、即时编译、Java本地调用、进程和线程管理等。理解Dalvik虚拟机的上述实现细节,有助于在运行时修改程序的行为,例如,拦截Java函数的调用。

2013-10-23

Android应用程序资源管理框架 PPT

Android应用程序主要由代码和资源组成。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就可以支持不同的UI布局。这种特性使得应用程序在运行时可以适应不同的屏幕大小和密度,以及不同的国家和语言等。资源在Android应用程序编译的过程中,也会被编译成二进制格式。这是为了压缩资源存储空间,以及加快运行时的资源解析速度。Android应用程序在运行的时候,资源管理器AssetManager和Resources会根据当前的机器设置,即屏幕大小、密度、方向,以及国家、地区语言的信息,查找正确的资源,并且进行解析,最后将它们渲染在UI上。这个PPT讲Android应用程序资源的编译、打包,以及它们在运行时的查找、解析过程。了解Android应用程序资源管理框架,有助于我们更好地开发出能够适配多种机型的应用程序。

2013-10-23

Android应用程序UI架构 高清PTT

Android系统采用一种称为Surface的UI架构为应用程序提供用户界面。在Android应用程序中,每一个Activity组件都关联有一个或者若干个窗口,每一个窗口都对应有一个Surface。有了这个Surface之后,应用程序就可以在上面渲染窗口的UI。最终这些已经绘制好了的Surface都会被统一提交给Surface管理服务SurfaceFlinger进行合成,最后显示在屏幕上面。无论是应用程序,还是SurfaceFlinger,都可以利用GPU等硬件来进行UI渲染,以便获得更流畅的UI。在Android应用程序UI架构中,还有一个重要的服务WindowManagerService,它负责统一管理协调系统中的所有窗口,例如管理窗口的大小、位置、打开和关闭等。这个PPT讲Android应用程序的Surface机制,阐述Activity、Window和View的关系,以及应用程序、WindowManagerService和SurfaceFlinger协作完成UI渲染的过程

2013-10-23

Android应用程序消息处理机制

Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个消息循环中执行的。Android应用程序其它线程,也可以像主线程一样,拥有消息循环。Android应用程序主线程是一个特殊的线程,因为它同时也是UI线程以及触摸屏、键盘等输入事件处理线程。主线程对消息循环很敏感,一旦发生阻塞,就会影响UI的流畅度,甚至发生ANR问题。这个PPT讲Android应用程序线程消息循环原理,主要涉及到Handler和Looper两个类,以及根据消息循环的不同使用场景,总结出三种线程使用模型。掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能

2013-10-23

Android应用程序进程管理

Android系统里面的应用程序进程有一个特点,那就是它们是被系统托管的。也就是说,系统根据需要来创建进程以及回收进程。进程创建发生在组件启动时,它们是由Zygote进程负责创建。Zygote进程是由系统中的第一个进程init负责启动。此外,用来运行各种系统服务的System Server进程也是由Zygote进程创建的。进程回收发生在内存紧张时,由Low Memory Killer执行。此外,组件管理服务ActivityManagerService和窗口管理服务WindowManagerService也会在适当的时候主动进行进程回收。每一个应用程序进程根据运行情况被赋予优先级,当需要回收进程的时候,就按照优先级从低到高的顺序进行回收。这个PPT讲Android应用程序进程的启动和回收,主要涉及到Zygote进程、System Server进程,以及组件管理服务ActivityManagerService、窗口服务WindowManagerService,还有专用驱动Low Memory Killer。通过了解Android系统对应用程序进程的管理,我们就能更清楚应用程序的运行机制。

2013-10-23

Android专用驱动

Android专用驱动构成了Android运行时的基石。从技术上来讲,Android专用驱动也是整个Android系统的亮点,特别是Binder驱动。Binder是一种进程间通信机制(IPC),它与传统的IPC机制对比,最大的特点是高效,因为通信数据在两个进程之间只需要执行一次拷贝即可。Binder在Android系统里面使用得非常广泛以及频繁。在涉及到比较大的通信数据时,Binder通常还结合另外一个驱动Ashmem来使用。Ashmem是一个共享内存驱动,它与传统的共享内存相比,最大的特点是它是通过文件描述符来描述的,并且可以动态地进行分块管理。动态分块管理的目的是可以将部分不再使用了的内存交回给系统,非常适合内存较小的移动设备使用。另外一个专用驱动Logger是一个日志驱动,它与传统的日志系统对比,特点是日志是记录在内核空间而非文件中,这样就可以提高日志的读写速度。这个PPT讲Logger、Binder和Ashmem三个Android专用驱动的实现原理。由于这三个驱动在Android源代码里面用得非常广泛和频繁,因此理解它们的实现原理,就可以掌握Android的精华。这对以后阅读Android系统的其它代码,也是非常有帮助的。

2013-10-23

Android硬件抽象层

Android硬件抽象层从开发到使用有一个清晰的层次。这个层次恰好对应了Android系统的架构层次,它向下涉及到Linux内核,向上涉及到应用程序框架层的服务,以及应用程序层对它的使用。Android硬件抽象层模块的开发本身也遵循一定的规范。有了这个规范之后,系统就可以对它进行自动加载,方便上层的使用。这个PPT通过一个具体的实例来分析Android硬件抽象层的开发、测试和使用,它在帮助我们理解Android系统架构的同时,也能教会我们如何在Android源代码环境中开发C/C++代码。

2013-10-23

Android系统架构概述PPT

Android系统 = Linux内核 + Android运行时。 Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。Android运行时从下到上又包括了HAL层、应用程序框架层和应用程序层。HAL层主要是为规避GPL而设计的,它将将硬件驱动分成内核空间和用户空间两部分,其中用户空间两部分采用的是商业友好的Apache License。应用程序框架层主要包括系统服务,例如组件管理服务、应用程序安装服务、窗口管理服务、多媒体服务和电信服务等。应用程序框架进一步又分为C/C++和Java两个层次,Java代码运行Dalvik虚拟机之上,并且通过JNI方法和C/C++交互。应用程序层主要就是由四大组件Activity、Service、Broadcast Receiver和Content Provider构成,它们是应用开发的基础。这个PPT从一个通用的应用程序架构开始,概述Android系统的专用驱动、HAL、关键服务、Dalvik、窗口机制和四大组件等。这个PPT 作为前面第1个PPT的延续,帮助进一步了解Android系统的具体实现。

2013-10-23

Android源代码开发和调试环境搭建完整版PPT

Android源代码开发环境与SDK开发环境相比,优势是可以查看和调试系统源代码,包括Java代码和C/C++代码。这对应用开发也是非常有用的,因为在开发中碰到疑难杂症时可以跟踪到系统内部去定位问题。对于涉及到C/C++代码的开发,例如JNI开发和安全相关开发,更加建议在Android源代码开发环境进行,这样就可以利用gdb以及gdbclient工具进行调试。这个PPT主要讲Android源代码下载、编译和运行,以及C/C++、Java代码的调试。

2013-10-23

Android组件设计思想

Android应用开发的哲学是把一切都看作是组件。把应用程序组件化的好处是降低模块间的耦合性,同时提高模块的复用性。Android的组件设计思想与传统的组件设计思想最大的区别在于,前者不依赖于进程。也就是说,进程即使由于内存紧张被强行杀掉了,但是运行在里面的组件还是存在的。这样就可以在组件再次需要使用时,原地满血复活,就像什么都没发生过一样。这种设计思想非常适合内存较小的移动设备。理解Android组件设计思想,对Android应用程序架构会有更好的认识。这一节讲Android组件化设计的背景、理念、原则,以及Android在OS级别上提供的组件化支持,其中还会包含一个实验来验证这种组件化设计思想,可以对Android系统有一个高层次的抽象理解。

2013-10-23

交互式人机对战五子棋

这是一款Android小游戏--交互式人机对战五子棋。之所以称之为交互式人机对战五子棋,是因为在进入人机对战模式这前,你可以任意设置好开局,同时,在对战过程中,你可以看到机器的思考过程,还可以标识出每一个落子点的优劣势。希望喜欢五子棋的同学能够喜欢,同时,它也非常适合入门级练习。

2011-07-06

空空如也

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

TA关注的人

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