• 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();
    }

  • 相关阅读:
    linux动态库(.so)和静态库(.a)的区别
    LeetCode刷题笔记和想法(C++)
    tf-idf、朴素贝叶斯的短文本分类简述
    计算机操作系统(第三版)读书笔记
    react hook封装一个排序按钮,有效果图
    react使用fetch封装请求的方法-简单易懂
    react开发企业中后台产品、政务门户网站的一些总结
    git常见命令以及基本使用
    Linux系统下fd分配的方法
    netfilter-IPv4实现框架分析(一)
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3831564.html
Copyright © 2020-2023  润新知