ContextImpl实现了context.java中的方法,
位于: base\core\java\android\content
关键方法:

static class ServiceFetcher {        int mContextCacheIndex = -1;        /**         * Main entrypoint; only override if you don't need caching.         */        public Object getService(ContextImpl ctx) {            ArrayList cache = ctx.mServiceCache;//mServiceCache是ArrayList类型对象             Object service;            synchronized (cache) {                if (cache.size() == 0) {                    // Initialize the cache vector on first access.                    // At this point sNextPerContextServiceCacheIndex                    // is the number of potential services that are                    // cached per-Context.                    for (int i = 0; i < sNextPerContextServiceCacheIndex; i++) { // sNextPerContextServiceCacheIndex为每个Android服务的索引值                         cache.add(null);//添加null对象                    }                } else {// size不为0的时候,即,之前已经调用过getSystemService                     service = cache.get(mContextCacheIndex);                    if (service != null) {                        return service;                    }                }                service = createService(ctx); // cache.size=0并且已经添加了一个null对象到cache里                 cache.set(mContextCacheIndex, service); // 设置新创建的服务添加到cache里                 return service;            }        }          // 在getService中先获取当前的服务,保存在cache(缓存)中,首先去注册服务, sNextPerContextServiceCacheIndex就是你注册服务的数量,对于一个新创建的Activity,

      ctx.mServiceCache中没有元素,此时cache.size() = 0,为cache中添加null对象,再创建一个服务给这个个新创建的Activity,对于一个不是新的Activity来说,找到之前 cache中的索引,返回service

       
 /**         * Override this to create a new per-Context instance of the         * service.  getService() will handle locking and caching.         */        public Object createService(ContextImpl ctx) {            throw new RuntimeException("Not implemented");        }    }    /**     * Override this class for services to be cached process-wide.     */    abstract static class StaticServiceFetcher extends ServiceFetcher {        private Object mCachedInstance;        @Override        public final Object getService(ContextImpl unused) {            synchronized (StaticServiceFetcher.this) {                Object service = mCachedInstance;                if (service != null) {                    return service;                }                return mCachedInstance = createStaticService();            }        }        public abstract Object createStaticService();    }    private static final HashMap SYSTEM_SERVICE_MAP =            new HashMap();    private static int sNextPerContextServiceCacheIndex = 0;    private static void registerService(String serviceName, ServiceFetcher fetcher) {        if (!(fetcher instanceof StaticServiceFetcher)) {            fetcher.mContextCacheIndex = sNextPerContextServiceCacheIndex++;        }        SYSTEM_SERVICE_MAP.put(serviceName, fetcher);    }

注册的服务有:

    1、AccessibilityManagerService-> AccessibilityManager
这块可能要仔细看一下,主要是一些View获得点击、焦点、文字改变等事件的分发管理,对整个系统的调试、问题定位等,也需要最这个服务仔细过目一下。
 2、AccountManagerService -> AccountManager
关于系统的用户,密码和管理权限的服务
3、ActivityManagerService->ActivityManager
这个是整个Android framework框架中最为核心的一个服务,管理整个框架中任务、进程管理, Intent解析等的核心实现。虽然名为Activity的Manager Service,但它管辖的范围,不只是Activity,还有其他三大组件,和它们所在的进程。也就是说用户应用程序的生命管理,都是由他负责的。
4、AlarmManagerService -> AlarmManager
闹钟服务程序
5、AudioService -> AudioManager
AudioFlinger的上层管理封装,主要是音量、音效、声道及铃声等的管理
6、MediaRouter
媒体流的服务
7、BluetoothService -> BluetoothDevice
蓝牙的后台管理和服务程序
8、ClipboardService -> ClipboardManager
和其他系统的clipBoard服务类似,提供复制黏贴功过。
9、ConnectivityService -> ConnectivityManager
网络连接状态服务,可供其他应用查询,当网络状态变化时,也可广播改变。
10、CountryDetector
11、DevicePolicyManager
12、DOWNLOAD_SERVICE->DownloadManager
下载服务
13、NFC_SERVICE
NFC服务,10cm以内的无线通信,允许电子设备之间进行非接触式点对点数据传输,实现信息交换、内容访问、服务交互
14、DROPBOX_SERVICE
用于生成和管理系统运行时的一些日志文件
15、INPUT_SERVICE
输入输出设备的服务,像鼠标,触摸,键盘等操作
16、DISPLAY_SERVICE
显示服务
17、INPUT_METHOD_SERVICE
输入法的服务,与EditText的交互
18、TEXT_SERVICES_MANAGER_SERVICE
文本信息管理的服务,包括信息的检索等等
19、KEYGUARD_SERVICE
屏幕的亮屏、解锁、锁定等相关服务
20、LAYOUT_INFLATER_SERVICE
载入layout中xml的文件
21、LOCATION_SERVICE
本地GPS定位服务
22、NETWORK_POLICY_SERVICE
网络策略服务
23、NotificationManagerService -> NotificationManager
负责管理和通知后台事件的发生等,这个和statusbar胶黏在一起,一般会在statusbar上添加响应图标。用户可以通过这知道系统后台发生了什么事情。
24、NSD_SERVICE
服务发现协议
25、PowerManagerService –> PowerManager
Android 的电源管理也是很重要的一部分。比如在待机的时候关掉不用的设备,待机时屏幕和键盘背光的关闭,用户操作的时候该打开多少设备等等。
26、SearchManagerService -> SearchManager
搜索管理服务,发送搜索UI,并且维护注册搜索的Activity
27、
SensorService -> SensorManager
管理Sensor(传感器)设备的服务,负责注册client设备及当client需要使用sensor时激活Sensor
28、STATUS_BAR_SERVICE
状态栏服务
29、STORAGE_SERVICE
SD卡的服务
30、TELEPHONY_SERVICE
31、THROTTLE_SERVICE
32、UI_MODE_SERVICE
33、USB_SERVICE
34、SERIAL_SERVICE
35、VIBRATOR_SERVICE
36、WALLPAPER_SERVICE
37、WIFI_SERVICE
38、WIFI_P2P_SERVICE
39、WindowManagerService -> WindowManager -> PhoneWindowManager

和ActivityManagerService高度粘合,窗口管理,这里最核心的就是输入事件的分发和管理。

40、USER_SERVICE

获取应用程序的信息,像包名、主线程的Looper、Theme、文件路径、contentResolver、SQLitedatabase

重写了Context.java中的接口,实现了Activity的启动关闭,Sendboardcast(消息的广播、接收)、Service的启动关闭、绑定,系统运行时的文件、权限的增加(grant)、检查(check)、删除(revoke)


ContextWarpper是对Context的封装,ContextThemeWarpper在ContextWarpper的基础上增加了Theme的封装。

 


 



更多相关文章

  1. 在android中获取系统正在运行的进程
  2. Android外部存储(/storage/emulated/0)无法创建文件夹
  3. Android 光系统
  4. AndroidManifest.xml文件详解(uses-feature)
  5. Android Studio 导入so文件
  6. Android Audio代码分析21 - 创建AudioEffect对象
  7. Android的string.xml文件中的特殊字符显示
  8. android如何从系统或相机中获取照片
  9. Hello Android - Android SDCard操作(文件读写,容量计算)

随机推荐

  1. Android启动篇 — init原理(一)
  2. Android闪屏效果实现方法
  3. Android文档(一)——什么是Android?
  4. Android系列教程之Android项目的目录结构
  5. Android日历功能有GestureDetector手势识
  6. Android通过OpenGl Es渲染NV21格式视频
  7. Android使用TextView实现无下划线超链接
  8. Android数据存储(二) Files
  9. Android(安卓)热补丁实践之路
  10. android开机动画制作与播放原理简介