zoukankan      html  css  js  c++  java
  • 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();
    }

  • 相关阅读:
    Integer和Integer常量池
    Spring中常用的23中设计模式
    GitHub 简单教程
    IDEA 中用好 Lombok,撸码效率至少提升5倍!
    Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
    ROS常用命令和VIM常用命令
    ROS运行
    VINS-Mono运行
    环境配置相关
    C89标准和C99标准C11标准的区别
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3831564.html
Copyright © 2011-2022 走看看