创建activity中的context

performLaunchActivity的时候获取final int displayId = ActivityClient.getInstance().getDisplayId(r.token),调用createDisplayContext创建context

@frameworks/base/core/java/android/app/ActivityThread.java
ActivityThread.performLaunchActivity()ContextImpl appContext = createBaseContextForActivity(r);final int displayId = ActivityClient.getInstance().getDisplayId(r.token);ContextImpl appContext = ContextImpl.createActivityContext(this, r.packageInfo, r.activityInfo, r.token, displayId, r.overrideConfig);for (int id : dm.getDisplayIds()) {isplay display = dm.getCompatibleDisplay(id, appContext.getResources());appContext = (ContextImpl) appContext.createDisplayContext(display);
@frameworks/base/core/java/android/app/ContextImpl.javaContextImpl context = new ContextImpl(null, mainThread, packageInfo, ContextParams.EMPTY, attributionTag, null, activityInfo.splitName, activityToken, null, 0, classLoader, null);context.mDisplay = resourcesManager.getAdjustedDisplay(displayId, context.getResources());  //记录Display
@frameworks/base/core/java/android/app/Activity.javaactivity.attach(appContext, this, getInstrumentation(), r.token, r.ident, app, r.intent, r.activityInfo, title, r.parent, config,r.referrer, r.voiceInteractor, window,);mWindow = new PhoneWindow(this, window, activityConfigCallback);
@frameworks/base/core/java/com/android/internal/policy/PhoneWindow.javamContext = context;  //PhoneWindow设置mContext为Activity里的contextmWindow.setWindowManager((WindowManager)context.getSystemService(Context.WINDOW_SERVICE), mToken, (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);//context是attach传入的值,使用context创建WindowManagerif (wm == null) {  //如果wm为空则创建使用mContext创建WindowManager,mContext是PhoneWindow保存的值wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);}mWindowManager = ((WindowManagerImpl)wm).createLocalWindowManager(this);return new WindowManagerImpl(mContext, parentWindow, mWindowContextToken); //创建WindowManagerImpl,mContext是wm的,wm有两种情况mContext = context;mParentWindow = parentWindow;1. Activity 为例来分析应用窗口的添加过程
@frameworks/base/core/java/android/app/ActivityThread.java
handleResumeActivity
@frameworks/base/core/java/android/view/WindowManagerImpl.javaView decor = r.window.getDecorView();wm.addView(decor, l);
@frameworks/base/core/java/android/app/ContextImpl.javagetDisplayNoVerifyreturn mDisplay;mGlobal.addView(view, params, mContext.getDisplayNoVerify(), mParentWindow, mContext.getUserId());    //WindowManagerImpl的mContext

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

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

相关文章

学校分体空调集控系统

学校分体空调集控系统是一种先进的温度控制解决方案,它主要针对学校等公共场所的空调管理需求而设计。该系统通过集中控制和管理多台分体空调设备,实现了更高的能效、更便捷的操作和更舒适的室内环境。 需求与挑战:学校教学楼、办公楼、实验楼…

智能血糖仪的条码二维码读取设备选型经验分享

智能科技的快速发展,推动医疗辅助设备朝着更加智能、操作更便捷的方向发展,便携式血糖仪已经成为糖尿病患者日常监测血糖的重要工具,但传统血糖仪的检测结果需要用户自己判断,缺乏数据分析很容易出错,而便携式智能血糖…

为啥找对象千万别找大厂男,还好我不是大厂的。。

网上看到一大厂女员工发文说:找对象千万别找大厂男,理由说了一大堆,无非就是大厂男为了逃避带娃,以加班为由宁愿在工位上玩游戏也不愿回家。当然这种观点有的人赞同有的人反对。 网友精彩评论: --------------下面是今…

浅谈定时器之统一随机定时器

浅谈定时器之统一随机定时器 简介 JMeter的统一随机定时器(Uniform Random Timer)是一种用于在请求之间插入随机延迟的组件,旨在模拟真实用户操作间的不固定等待时间,从而更准确地模拟实际场景下的负载。这个定时器在每个线程循…

Python飞跃计划:30天从Java开发者到Python高手

背景与动机 作为一名拥有一年Java开发经验的程序员,我在工作中遇到了技术瓶颈,无法在现有环境中实现技术性的突破。面对选择深入枯燥的技术细节或拓展技术广度,我决定选择后者。Python以其简洁的语法和广泛的应用场景,如脚本编写…

Python基础教程——20个让人眼前一亮的逻辑妙用!

文末免费赠精品编程资料~~ Python不仅仅是一种编程语言,它还是解决问题的艺术,充满了让人拍案叫绝的“小巧思”。通过这15个小技巧,你不仅能提升编程技能,还能让你的代码更加优雅、高效。让我们一探究竟吧! 1. 列表推…

终于把TikTok账号养好了!我是如何做的?

对于很多刚开始运营TikTok的新手小白来说,都会有一个同样的疑问,那就是:TikTok到底需不需要养号?这里明确告诉大家是需要养号的,今天就把我自己实操过的养号经验和策略总结出来,分享给大家。 一、什么是Tik…

2025年计算机毕业设计题目参考

今年最新计算机毕业设计题目参考 以下可以参考 springboot洗衣店订单管理系统 springboot美发门店管理系统 springboot课程答疑系统 springboot师生共评的作业管理系统 springboot平台的医疗病历交互系统 springboot购物推荐网站的设计与实现 springboot知识管理系统 springbo…

Character Animator 2024 mac/win版:赋予角色生命,动画更传神

Character Animator 2024是一款强大的角色动画制作软件,以其创新的功能和卓越的性能,为动画师、游戏开发者以及设计师们带来了全新的创作体验。 Character Animator 2024 mac/win版获取 这款软件采用了先进的骨骼绑定技术,使得角色动画的制作…

【JavaScript】什么是异步处理,如何异步处理?

概要 在 JavaScript 中,代码默认是同步执行的。这意味着每一行代码都是按照顺序执行的,前一行代码执行完毕后才会执行下一行。这种执行方式称为同步(synchronous)执行。 然而,在实际开发中,我们常常需要执行…

系统架构设计师【论文-2016年 试题4】: 论微服务架构及其应用(包括写作要点和经典范文)

论微服务架构及其应用(2016年 试题4) 近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,…

基于Java的冬奥会科普平台

开头语:你好,我是计算机学姐码农小野。如果你对冬奥会科普平台感兴趣或有其他技术需求,欢迎随时私信我。 开发语言:Java 数据库:MySQL 技术:Java、B/S架构 工具:MyEclipse、MySQL 系统展示…

Arcgis导入excel出现的问题

我手动添加了object-id字段也没有用,然后再excel里面又添加了一行,关闭后打开还是不行,额案后在网上看到了一种方法,很有效,予以记录。 1、我的文件是csv格式, 先在excel里面另存为xlsx格式 2、转换工具里…

【vue3 + element plus 】拖动排序实现(只能拖拽一次的问题、拖动后的位置不准确问题)

1.使用sortablejs插件 用于el-table列表拖动排序 import Sortable from sortablejs // 拖拽插件 mounted() { this.rowDrop() }, swap(arr, from, to) { // 在这方法中按需求修改排序规则即可if (from < 0 || from > arr.length || to < 0 || to > arr.length) r…

1 catboot:房价预测

学到的知识&#xff1a; 面对传统特征层面如何进行深度挖掘&#xff0c;衍生有价值的特征&#xff0c;让模型更好的理解数据&#xff1b;如何处理文本特征&#xff1b;如何对类别特征进行处理&#xff1b;类别特征与连续特征如何组合更加的高效&#xff1b;如何使用catboost, …

联华集团:IT团队如何实现从成本中心提升至价值中心|OceanBase 《DB大咖说》(十)

OceanBase《DB大咖说》第 10 期&#xff0c;我们邀请到了联华集团的CTO楼杰&#xff0c;来分享他如何思考 IT 业务价值&#xff0c;以及联华华商数据库的升级实践。 楼杰从大学毕业后就进入了联华工作&#xff0c;并一直扎根在近 20 年的&#xff0c;从一名底层的技术员成长为…

[每日一练]利用左右指定键连接实现经理的下属员工数量

该题目来自于力扣&#xff1a; 1731. 每位经理的下属员工数量 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 表&#xff1a;Employees----------------------- | Column Name | Type | ----------------------- | employee_id | int | | name …

【区块链】POS(Proof of Stake)权益证明算法深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 POS&#xff08;Proof of Stake&#xff09;权益证明算法深度解析引言1. POS基本…

Bash sleep随机时间

在 Bash 中&#xff0c;如果你想让 sleep 命令等待一个随机的时间&#xff0c;你可以使用 $RANDOM 变量来生成一个随机数&#xff0c;然后将其转换为秒数。但是&#xff0c;$RANDOM 生成的数字范围是从 0 到 32767&#xff0c;这可能对于你想要的等待时间来说太大了。 为了得到…

【代码随想录】【算法训练营】【第42天】 [1049]最后一块石头的重量II [494]目标和 [474]一和零

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 42&#xff0c;周二&#xff0c;坚持一下~ 题目详情 [1049] 最后一块石头的重量II 题目描述 1049 最后一块石头的重量II 解题思路 前提&#xff1a;最多只会剩下一块 石头&#xff0c;求此…