• Android之getSystemService


     

    getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。

     

     

    传入的Name 返回的对象 说明
    WINDOW_SERVICE  WindowManager 管理打开的窗口程序
    LAYOUT_INFLATER_SERVICE LayoutInflater  取得xml里定义的view
    ACTIVITY_SERVICE ActivityManager  管理应用程序的系统状态

    POWER_SERVICE

    PowerManger 电源的服务
    ALARM_SERVICE AlarmManager 闹钟的服务

    NOTIFICATION_SERVICE 

    NotificationManager 状态栏的服务
    KEYGUARD_SERVICE  KeyguardManager  键盘锁的服务
    LOCATION_SERVICE  LocationManager  位置的服务,如GPS
    SEARCH_SERVICE SearchManager  搜索的服务
    VEBRATOR_SERVICE  Vebrator 手机震动的服务
    CONNECTIVITY_SERVICE Connectivity 网络连接的服务
    WIFI_SERVICE WifiManager Wi-Fi服务
     TELEPHONY_SERVICE TeleponyManager 电话服务

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     





    getSystemService()方法是如何实现的?

    在研究Android Application  Framwork层的源代码遇到一个问题 

    就是Activity里面的getSystemService()方法是怎么实现的?
    我研究了半天没看出怎么实现的
    Activity继承自ContextThemeWrapper(这里面只有部分实现),ContextThemeWrapper继承自ContextWrapper,ContextWrapper继承自Context
    Context是个抽象类,getSystemService也是抽象方法
    没找到在哪里实现的Context的抽象方法:getSystemService啊

    我觉得会不会是系统自动调用native实现这个抽象类Context?
    但是请教高手们具体是怎么实现的?



    你好  在 framework 层文件 ContextImpl.java 文件里面
    根据service 的类型 调用相应的 manager层
    public Object getSystemService(String name) {
            if (WINDOW_SERVICE.equals(name)) {
                return WindowManagerImpl.getDefault();
            } else if (LAYOUT_INFLATER_SERVICE.equals(name)) {
                synchronized (mSync) {
                    LayoutInflater inflater = mLayoutInflater;
                    if (inflater != null) {
                        return inflater;
                    }
                    mLayoutInflater = inflater =
                        PolicyManager.makeNewLayoutInflater(getOuterContext());
                    return inflater;
                }
            } else if (ACTIVITY_SERVICE.equals(name)) {
                return getActivityManager();
            } else if (INPUT_METHOD_SERVICE.equals(name)) {
                return InputMethodManager.getInstance(this);
            } else if (ALARM_SERVICE.equals(name)) {
                return getAlarmManager();
            } else if (ACCOUNT_SERVICE.equals(name)) {
                return getAccountManager();
            } else if (POWER_SERVICE.equals(name)) {
                return getPowerManager();
    }

  • 相关阅读:
    Digital Video Stabilization and Rolling Shutter Correction using Gyroscope 论文笔记
    Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记
    Panorama Stitching on Mobile
    Natural Image Stitching with the Global Similarity Prior 论文笔记 (三)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(二)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(一)
    ADCensus Stereo Matching 笔记
    Efficient Large-Scale Stereo Matching论文解析
    Setting up caffe on Ubuntu
    Kubernetes配置Secret访问Harbor私有镜像仓库
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3831564.html
Copyright © 2020-2023  润新知