当前位置: 首页 > news >正文

创建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

相关文章:

  • 什么是SLA
  • SAP-ABAP-03-课上代码
  • 【车载开发系列】汽车嵌入式开发常用工具介绍
  • 功能测试 之 单模块测试----抢购模块
  • [BFS广搜]迷阵
  • Android 一个改善的okHttp封装库
  • 第十一章:接口
  • Linux C编译器从零开发三
  • 02-ES6新语法
  • shell 三剑客-grep
  • SpringSecurity-入门代码
  • 【Linux】如何创建yum 组(yum groups)
  • 计算机类期刊含金量横纵向对比(一)
  • 计算机网络 —— 运输层(UDP和TCP)
  • 面试专区|【32道HDFS高频题整理(附答案背诵版)】
  • JavaScript-如何实现克隆(clone)函数
  • 【刷算法】从上往下打印二叉树
  • 03Go 类型总结
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • cookie和session
  • E-HPC支持多队列管理和自动伸缩
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • FineReport中如何实现自动滚屏效果
  • Github访问慢解决办法
  • Linux快速复制或删除大量小文件
  • Python打包系统简单入门
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 在Unity中实现一个简单的消息管理器
  • 阿里云重庆大学大数据训练营落地分享
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #define用法
  • $.proxy和$.extend
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • %@ page import=%的用法
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (不用互三)AI绘画工具应该如何选择
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)fock函数详解
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net mvc 获取url中controller和action
  • .NET 分布式技术比较
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc