WMS服务启动

news2024/11/18 13:51:05

WMS服务启动

  • 1、SystemServer.java#startOtherServices(t)中启动
  • 2、WindowManagerService.java#main创建初始化
  • 3、简易时序图
  • 4、相关线程

1、SystemServer.java#startOtherServices(t)中启动

在这里插入图片描述

WMS属于SystemServer启动众多的系统服务中的一个,WindowManagerService中提供了一个静态main方法

  • context这里是系统ActivityThread中的mSystemContext
  • inputManager就是InputManagerService
  • new PhoneWindowManager()是继承 WindowManagerPolicy
  • mActivityManagerService.mActivityTaskManager就是AMS服务

ServiceManager.addService(Context.WINDOW_SERVICE, wm, ...) 添加名为WINDOW_SERVICE = "window"服务
mActivityManagerService.setWindowManager(wm) AMS 中设置关联WMS服务
wm.onInitReady() 主要初始化 PhoneWindowManager implements WindowManagerPolicy

2、WindowManagerService.java#main创建初始化

在这里插入图片描述

1、相关参数关联:mAtmService = atmmContext = contextmInputManager = inputManagermPolicy = policy
2、本地服务添加:LocalServices.addService(WindowManagerPolicy.class, mPolicy)LocalServices.addService(WindowManagerInternal.class, new LocalService())

private WindowManagerService(Context context, InputManagerService inputManager,
        boolean showBootMsgs, boolean onlyCore, WindowManagerPolicy policy,
        ActivityTaskManagerService atm, DisplayWindowSettingsProvider
        displayWindowSettingsProvider, Supplier<SurfaceControl.Transaction> transactionFactory,
        Supplier<Surface> surfaceFactory,
        Function<SurfaceSession, SurfaceControl.Builder> surfaceControlFactory) {
    installLock(this, INDEX_WINDOW);
    mGlobalLock = atm.getGlobalLock();
    mAtmService = atm;
    mContext = context;
    mIsPc = mContext.getPackageManager().hasSystemFeature(FEATURE_PC);
    mAllowBootMessages = showBootMsgs;
    mOnlyCore = onlyCore;
    mLimitedAlphaCompositing = context.getResources().getBoolean(
            com.android.internal.R.bool.config_sf_limitedAlpha);
    mHasPermanentDpad = context.getResources().getBoolean(
            com.android.internal.R.bool.config_hasPermanentDpad);
    mInTouchMode = context.getResources().getBoolean(
            com.android.internal.R.bool.config_defaultInTouchMode);
    inputManager.setInTouchMode(mInTouchMode);
    mDrawLockTimeoutMillis = context.getResources().getInteger(
            com.android.internal.R.integer.config_drawLockTimeoutMillis);
    mAllowAnimationsInLowPowerMode = context.getResources().getBoolean(
            com.android.internal.R.bool.config_allowAnimationsInLowPowerMode);
    mMaxUiWidth = context.getResources().getInteger(
            com.android.internal.R.integer.config_maxUiWidth);
    mDisableTransitionAnimation = context.getResources().getBoolean(
            com.android.internal.R.bool.config_disableTransitionAnimation);
    mPerDisplayFocusEnabled = context.getResources().getBoolean(
            com.android.internal.R.bool.config_perDisplayFocusEnabled);
    mAssistantOnTopOfDream = context.getResources().getBoolean(
            com.android.internal.R.bool.config_assistantOnTopOfDream);

    mLetterboxConfiguration = new LetterboxConfiguration(context);

    mInputManager = inputManager; // Must be before createDisplayContentLocked.
    mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);

    mSurfaceControlFactory = surfaceControlFactory;
    mTransactionFactory = transactionFactory;
    mSurfaceFactory = surfaceFactory;
    mTransaction = mTransactionFactory.get();

    mPolicy = policy;
    mAnimator = new WindowAnimator(this);
    mRoot = new RootWindowContainer(this);

    final ContentResolver resolver = context.getContentResolver();
    mUseBLAST = Settings.Global.getInt(resolver,
        Settings.Global.DEVELOPMENT_USE_BLAST_ADAPTER_VR, 1) == 1;

    mSyncEngine = new BLASTSyncEngine(this);

    mWindowPlacerLocked = new WindowSurfacePlacer(this);
    mTaskSnapshotController = new TaskSnapshotController(this);

    mWindowTracing = WindowTracing.createDefaultAndStartLooper(this,
            Choreographer.getInstance());

    LocalServices.addService(WindowManagerPolicy.class, mPolicy);

    mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);

    mKeyguardDisableHandler = KeyguardDisableHandler.create(mContext, mPolicy, mH);

    mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);

    if (mPowerManagerInternal != null) {
        mPowerManagerInternal.registerLowPowerModeObserver(
                new PowerManagerInternal.LowPowerModeListener() {
            @Override
            public int getServiceType() {
                return ServiceType.ANIMATION;
            }

            @Override
            public void onLowPowerModeChanged(PowerSaveState result) {
                synchronized (mGlobalLock) {
                    final boolean enabled = result.batterySaverEnabled;
                    if (mAnimationsDisabled != enabled && !mAllowAnimationsInLowPowerMode) {
                        mAnimationsDisabled = enabled;
                        dispatchNewAnimatorScaleLocked(null);
                    }
                }
            }
        });
        mAnimationsDisabled = mPowerManagerInternal
                .getLowPowerState(ServiceType.ANIMATION).batterySaverEnabled;
    }
    mScreenFrozenLock = mPowerManager.newWakeLock(
            PowerManager.PARTIAL_WAKE_LOCK, "SCREEN_FROZEN");
    mScreenFrozenLock.setReferenceCounted(false);

    mDisplayNotificationController = new DisplayWindowListenerController(this);

    mActivityManager = ActivityManager.getService();
    mActivityTaskManager = ActivityTaskManager.getService();
    mAmInternal = LocalServices.getService(ActivityManagerInternal.class);
    mAtmInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
    mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
    AppOpsManager.OnOpChangedInternalListener opListener =
            new AppOpsManager.OnOpChangedInternalListener() {
                @Override public void onOpChanged(int op, String packageName) {
                    updateAppOpsState();
                }
            };
    mAppOps.startWatchingMode(OP_SYSTEM_ALERT_WINDOW, null, opListener);
    mAppOps.startWatchingMode(AppOpsManager.OP_TOAST_WINDOW, null, opListener);

    mPmInternal = LocalServices.getService(PackageManagerInternal.class);
    mTestUtilityService = LocalServices.getService(TestUtilityService.class);
    final IntentFilter suspendPackagesFilter = new IntentFilter();
    suspendPackagesFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED);
    suspendPackagesFilter.addAction(Intent.ACTION_PACKAGES_UNSUSPENDED);
    context.registerReceiverAsUser(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String[] affectedPackages =
                    intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
            final boolean suspended =
                    Intent.ACTION_PACKAGES_SUSPENDED.equals(intent.getAction());
            updateHiddenWhileSuspendedState(new ArraySet<>(Arrays.asList(affectedPackages)),
                    suspended);
        }
    }, UserHandle.ALL, suspendPackagesFilter, null, null);

    // Get persisted window scale setting
    mWindowAnimationScaleSetting = Settings.Global.getFloat(resolver,
            Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting);
    mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver,
            Settings.Global.TRANSITION_ANIMATION_SCALE,
            context.getResources().getFloat(
                    R.dimen.config_appTransitionAnimationDurationScaleDefault));

    setAnimatorDurationScale(Settings.Global.getFloat(resolver,
            Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting));

    mForceDesktopModeOnExternalDisplays = Settings.Global.getInt(resolver,
            DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS, 0) != 0;

    final String displaySettingsPath = Settings.Global.getString(resolver,
            DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH);
    mDisplayWindowSettingsProvider = displayWindowSettingsProvider;
    if (displaySettingsPath != null) {
        mDisplayWindowSettingsProvider.setBaseSettingsFilePath(displaySettingsPath);
    }
    mDisplayWindowSettings = new DisplayWindowSettings(this, mDisplayWindowSettingsProvider);

    IntentFilter filter = new IntentFilter();
    // Track changes to DevicePolicyManager state so we can enable/disable keyguard.
    filter.addAction(ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
    mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);

    mLatencyTracker = LatencyTracker.getInstance(context);

    mSettingsObserver = new SettingsObserver();

    mHoldingScreenWakeLock = mPowerManager.newWakeLock(
            PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG_WM);
    mHoldingScreenWakeLock.setReferenceCounted(false);

    mSurfaceAnimationRunner = new SurfaceAnimationRunner(mTransactionFactory,
            mPowerManagerInternal);

    mAllowTheaterModeWakeFromLayout = context.getResources().getBoolean(
            com.android.internal.R.bool.config_allowTheaterModeWakeFromWindowLayout);

    mTaskPositioningController = new TaskPositioningController(
            this, mInputManager, mActivityTaskManager, mH.getLooper());
    mDragDropController = new DragDropController(this, mH.getLooper());

    mHighRefreshRateDenylist = HighRefreshRateDenylist.create(context.getResources());

    mConstants = new WindowManagerConstants(this, DeviceConfigInterface.REAL);
    mConstants.start(new HandlerExecutor(mH));

    LocalServices.addService(WindowManagerInternal.class, new LocalService());
    mEmbeddedWindowController = new EmbeddedWindowController(mAtmService);

    mDisplayAreaPolicyProvider = DisplayAreaPolicy.Provider.fromResources(
            mContext.getResources());

    mDisplayHashController = new DisplayHashController(mContext);
    setGlobalShadowSettings();
    mAnrController = new AnrController(this);
    mStartingSurfaceController = new StartingSurfaceController(this);

    mBlurController = new BlurController(mContext, mPowerManager);
}

3、简易时序图

在这里插入图片描述

4、相关线程

frameworks/base/services/java/com/android/server/SystemServer.java
frameworks/base/services/core/java/com/android/server/DisplayThread.java
frameworks/base/services/core/java/com/android/server/UiThread.java
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

社会工程学技术框架解读

社会工程学技术其实就是利用各种心理进行技术上的欺骗。 尽管许多社会工程学大师都是无师自通,依赖自己的天赋悟性、聪明才智和临场应变能力不断演绎着社会工程学艺术,然而,社会工程学仍然具有一些通用的技术流程与共性特征。Social-Engineer 网站创始人克里斯哈德纳吉对其加…

Spring Cloud Alibaba 快速上手搭建公司项目(二)Nacos

Nacos(全称为&#xff1a;阿里巴巴开源项目 - 命名服务 & 配置中心)是阿里巴巴集团开源的一个动态服务发现、配置管理和服务管理平台。它提供了一种简单易用的方式来管理和监控微服务应用程序中的服务实例、配置和元数据。 Nacos是一个高度可扩展的平台&#xff0c;支持多…

chatgpt赋能python:Python中的[::-1]操作:反转列表、元组和字符串

Python中的[::-1]操作&#xff1a;反转列表、元组和字符串 在Python编程中&#xff0c;[::-1]是一个相当常用的操作符&#xff0c;它可以对列表、元组、字符串等序列类型进行反转。本文将详细介绍这个操作符的语法和使用方法&#xff0c;并且为您提供一些在实际应用中的例子。…

css浮动特性

1. 传统网页的三种布局方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

类和对象【3】初始化列表

全文目录 引言初始化列表定义特性 总结 引言 上一篇文章中介绍了构造函数&#xff0c;它可以在实例化一个类对象的时候自动调用&#xff0c;以初始化类对象&#xff1a; 戳我看默认成员函数详解 但是&#xff0c;不难发现&#xff0c;在构造函数体中对成员变量的初始化其实是属…

武汉环保门禁电子台账视频监控系统

武汉环保门禁电子台账视频监控系统&#xff0c;是顺应国家政策需求&#xff0c;基于视频监控、环保门禁系统、物联技术&#xff0c;结合大数据和人工智能等技术手段&#xff0c;对汽车排放单位进行环境管理的一套综合系统。 系统介绍 该系统实现对机动车排放检测的监管&#…

Android 读取本地数据进行本地开发

前言 在日常开发当中&#xff0c;API接口还没有部署&#xff0c;但是UI已经出来了&#xff0c;这时候往往都会使用本地数据进行功能界面的搭建&#xff0c;这样往往能很大程度节约开发时间&#xff0c;工具类拿来直接用&#xff0c;话不多说&#xff0c;开整 一、项目搭建 1…

Web应用技术(第十四周/持续更新)

本次练习基于how2j和课本,初步认识Spring。 以后我每周只写一篇Web的博客&#xff0c;所以的作业内容会在这篇博客中持续更新。。。 一、Spring基础1.Spring概述:2.Sring组成&#xff1a;3.BeanFactory&#xff1a;4.控制反转&#xff1a;5.依赖注入&#xff1a;6.JavaBean与S…

学习Java可以从事什么岗位(合集)

学习Java可以从事什么岗位 学习Java可以从事的岗位 Java可以做网站 Java可以用来编写网站&#xff0c;现在很多大型网站都用Jsp写的&#xff0c;JSP全名Java Server Pages 它是一种动态网页技术&#xff0c;比如我们熟悉的163&#xff0c;一些政府网站都是采用JSP编写的。 所以…

MySQL小练习(使用JDBC操作数据库)

题目&#xff1a; 1.创建一个数据库(学号姓名缩写,如: 2020001zs)在数据库中创建一张表 (五个以上字段) ; 2.使用JDBC(使用PreparedStatement接口) 操作数据库对表中的数据进行增删改查操作 目录 一、数据库 1.创建数据库 2.创建表 3.添加数据 二、JDBC 1.准备环境 2.查询…

TCO-PEG-Thiol,反式环辛烯聚乙二醇巯基,具有末端硫醇基团的双功能TCO PEG衍生物

产品描述&#xff1a; TCO PEG Thiol是具有末端硫醇基团的双功能TCO PEG衍生物。TCO&#xff08;反式环辛烯&#xff09;基团与四嗪基团快速有效地反应&#xff0c;而硫醇&#xff08;巯基&#xff09;可用于与马来酰亚胺反应&#xff0c;与金表面结合并参与许多其他反应。 TC…

DOTA PSMA,1702967-37-0,PSMA-617,特异性膜抗原 (PSMA) 的强有效抑制剂

产品描述&#xff1a; DOTA-PSMA是Prostate特异性膜抗原 (PSMA) 的强有效抑制剂&#xff0c;其 Ki 值为 0.37 nM。DOTA-PSMA由三种成分组成:药效基团Glutamate-urea-Lysine&#xff0c;螯合剂DOTA&#xff08;能够结合68Ga或177Lu&#xff09;&#xff0c;以及连接这两个实体的…

sftp配置免密以及权限配置

场景&#xff1a;机器A通过sftp免密登录机器B 机器A有用户redis、 nginx, 机器B有用户monitor、 bak用户 需求&#xff1a;机器A在nginx用户环境下&#xff0c;sftp机器B的bak目录 注意&#xff1a;因为sshd为了安全&#xff0c;对属主的目录和文件权限有所要求。如果权限…

[LitCTF 2023]ssvvgg(Steghide爆破)

题目是一张.svg的图片 关于SVG的简介&#xff1a; SVG格式文件是可缩放矢量图形文件的缩写&#xff0c;是一种标准的图形文件类型&#xff0c;用于在互联网上渲染二维图像。与其他流行的图像文件格式不同&#xff0c;SVG格式文件将图像存储为矢量&#xff0c;这是一种基于数学…

SpringCloud(27):授权控制实现

很多时候&#xff0c;我们需要根据调用来源来判断该次请求是否允许放行&#xff0c;这时候可以使用 Sentinel 的来源访问控制&#xff08;黑白名单控制&#xff09;的功能。来源访问控制根据资源的请求来源&#xff08;origin&#xff09;判断资源访问是否通过&#xff0c;若配…

运营-18.积分体系概念

积分体系是一种通过平台补贴来提升用户忠诚度、为平台各项业务的导流的运营手段&#xff1b; 作用 1. 积分体系可以引导用户逐渐投入沉没成本&#xff0c;包括时间、精力和金钱&#xff1b; 2. 沉没成本越高&#xff0c;用户越难以离开&#xff1b; 3. 积分体系可以给其他业务导…

数据库实训心得体会_数据库实习个人总结

数据库实训心得体会篇一一个月的数据库实训就转眼间就上完了&#xff0c;期间讲解了一个学生管理系统&#xff0c;最后还做了一个小的数据库链接作业。现在就说说关于vb链接的数据库的一些方法。 首先说数据库&#xff0c;简单的说就是建表格,然后把一张一张的表格和在一起,成为…

nginx判断访问的是不是index.html如果是且index.html存在直接返回

可以通过以下配置实现此功能&#xff1a; 复制server {listen 80;server_name example.com;root /var/www/example.com;index index.html;location / {try_files $uri $uri/ index;}location index {if (-f $document_root/index.html) {return 200;}rewrite ^ /index.html la…

Spring源码(一) — 序言

序言 Java程序员的日常开发一定都离不开Spring的框架&#xff0c;从Spring、SpringMVC、SpringBoot、SpringCloud… 而Spring框架就是Spring家族中最基础也是最重要的一个框架。 Spring 我们常说的Spring往往都绕不开IOC&#xff08;控制反转&#xff09;和AOP&#xff08;切…

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

进入到 2023 年以来&#xff0c; Zebec 生态的整体发展突飞猛进&#xff0c;除了流支付协议 Zebec Protocol 不断通过收购来扩大自身流支付业务、与万事达等合作推出 Zebec Card 等在支付业务上&#xff0c;实现进展外&#xff0c;其社区驱动的Layer3 模块化链 Nautilus Chain …