一、总体结构:
框架中包含了3个主要部分:1.服务端; 2.客户端; 3.Linux驱动。
二、服务端主要成员:
主要包括AMS、PMS、WMS等。通过Binder机制与客户端进行交互。
-
ActivityManagerService(AMS):管理所有应用程序中的Activity,他掌握所有Activity的情况,所有具有调度Activity生命周期的能力,简而言之,它就是管理和掌控所有的Activity。ActivityThread会通过Binder与之交互,而AMS与Zygote之间进行交互则是通过Socket通信。
-
WindowManagerService(Wms):控制窗口的显示与隐藏以及窗口的层序,简而言之,就是它是管理窗口的,可以知道大多数和View有关系的都要跟他打交道。
-
PackageManagerService:它是Android系统中最常用的服务之一。它负责系统中Package的管理,应用程序的安装、卸载、信息查询等。
-
KeyQ
类:它是Wms的一个内部类,一旦创建就会启动一个新线程,这个线程会不断的接收读取用户的UI操作消息,并把这些消息放到消息队列QueueEvent中。 -
InputDispatcherThread
类:该类也是一旦创建就会启动一个线程,这个线程会不断的从上面的QueueEvent中取出用户的消息,进行一定的过滤,再讲这些消息发送给当前活动的客户端程序中。
三、客户端主要成员:
-
ActivityThread
:主线程(UI线程),它的main()
函数就是Android 程序的入口。内部类主要有ApplicationThread
(继承自IBinder
);还有H
类(继承自Handler
)。ApplicationThread
主要负责与AMS打交道(通过Binder
机制实现交互),通过调用H
来发送消息,并在H
消息处理函数中调用主线程的方法来实现真正的业务逻辑。注意:ActivityThread
不是线程!!! -
ViewRootImpl
:很重要的一个类,负责客户端与WMS的交互:内部有W类,W类继承于Binder,所以他与ApplicationThread的角色是差不多的,只不过他对应的是Wms,当Wms想与客户端进行通信的时候,Wms就调用这个类。内部又有ViewRootHandler类继承于Handler,所以他能在W类接收到Wms的消息后,把这个消息传送到UI线程中。同时界面绘制的发起点也是在这里面:performTraversals()。 -
Activity
:四大组件之一,用得最多的组件。主要与用户交互。 -
PhoneWindow
:继承自Window类,它里面会放一个DecorView,它提供了一组统一窗口操作的API. -
DecorView
类:这是我们所能看到的View的所有,它继承自FrameLayout,我们写的布局view就是放在他这个里面。 -
ApplicationThread
类:继承于Binder,当Ams想与客户端通信时(即调用客户端的方法),Ams调用的就是这个类。 -
Instrumentation
类:负责直接与Ams对话,比如当客户端想与Ams进行通信时(即调用Ams服务里的方法),都是他去实现单向调用Ams,即他相当于于一个管家,所有想调Ams的操作都集中到他这儿,他负责单向调用Ams. -
ActivityManager
:@SystemService(Context.ACTIVITY_SERVICE)
属于系统服务。ActivityManager
存在于用户进程中,由用户进程调用获取Activity
管理的一些基本信息。如:getRunningAppProcesses()、getAppTasks()
。但是ActivityManager
类并不真正执行这些操作,操作的真正执行在system_process
进程中的ActivityManagerService
,ActivityManagerService
作为一个服务在system_process
启动时被加载。ActivityManager
与AMS
分属于不同的进程。它们之间通过Binder
进行交互。 -
WindowManager
:@SystemService(Context.WINDOW_SERVICE)
属于系统级服务。它是一个接口,继承自ViewManager
接口。由此可见,它的职责主要是对控件View
进行增(addView(View view, ViewGroup.LayoutParams params)
)、删(removeView(View view)
)、改(updateViewLayout(View view, ViewGroup.LayoutParams params)
)操作。它本身还提供一些我们访问手机屏幕的方法。屏幕的透明度、亮度、背景。它的实现类是WindowManagerImpl
。对View
的操作逻辑由WindowManagerImpl、WindowManagerGlobal及ViewRootImpl
等共同完成。 -
ContentProviders
:使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享自己的数据。进程间通信的方式之一。 -
View System
:可以用来构建应用程序, 它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons), 甚至可嵌入的web浏览器。 -
NotificationManager
:@SystemService(Context.NOTIFICATION_SERVICE)
,系统级服务。主要管理通知栏消息,提醒用户有事发生。它使得应用程序可以在状态栏中显示自定义的提示信息。 -
PackageManager
:检索各种类型的已经安装在设备上的应用信息。提供对系统的安装包的访问。包括安装、卸载应用,查询permission相关信息,查询Application相关信息等。 -
TelephonyManager
:@SystemService(Context.TELEPHONY_SERVICE)
系统级服务。主要提供了一系列用于访问与手机通讯相关的状态和信息的方法,查询电信网络状态信息,sim卡的信息等。 -
ResourceManager
:提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。 -
LocationManager
:@SystemService(Context.LOCATION_SERVICE)
,系统级服务。提供设备的地理位置的获取方式。 -
XMPP
:可扩展通讯和表示协议。前身为Jabber,提供即时通信服务。例如推送功能,Google Talk。
网友评论