安卓c语言获取context,Android中Context详解 ---- 你所不知道的Context

2023-11-12

二、 什么时候创建Context实例

熟悉了Context的继承关系后,我们接下来分析应用程序在什么情况需要创建Context对象的?应用程序创建Context实例的

情况有如下几种情况:

1、创建Application 对象时, 而且整个App共一个Application对象

2、创建Service对象时

3、创建Activity对象时

因此应用程序App共有的Context数目公式为:

总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)

具体创建Context的时机

1、创建Application对象的时机

每个应用程序在第一次启动时,都会首先创建Application对象。如果对应用程序启动一个Activity(startActivity)流程比较

清楚的话,创建Application的时机在创建handleBindApplication()方法中,该函数位于 ActivityThread.java类中 ,如下:

//创建Application时同时创建的ContextIml实例

privatefinalvoidhandleBindApplication(AppBindData data){

...

///创建Application对象

Application app = data.info.makeApplication(data.restrictedBackupMode,null);

...

}

publicApplication makeApplication(booleanforceDefaultAppClass, Instrumentation instrumentation) {

...

try{

java.lang.ClassLoader cl = getClassLoader();

ContextImpl appContext =newContextImpl();//创建一个ContextImpl对象实例

appContext.init(this,null, mActivityThread);//初始化该ContextIml实例的相关属性

///新建一个Application对象

app = mActivityThread.mInstrumentation.newApplication(

cl, appClass, appContext);

appContext.setOuterContext(app);//将该Application实例传递给该ContextImpl实例

}

...

}

2、创建Activity对象的时机

通过startActivity()或startActivityForResult()请求启动一个Activity时,如果系统检测需要新建一个Activity对象时,就会

回调handleLaunchActivity()方法,该方法继而调用performLaunchActivity()方法,去创建一个Activity实例,并且回调

onCreate(),onStart()方法等, 函数都位于 ActivityThread.java类 ,如下:

//创建一个Activity实例时同时创建ContextIml实例

privatefinalvoidhandleLaunchActivity(ActivityRecord r, Intent customIntent) {

...

Activity a = performLaunchActivity(r, customIntent);//启动一个Activity

}

privatefinalActivity performLaunchActivity(ActivityRecord r, Intent customIntent) {

...

Activity activity =null;

try{

//创建一个Activity对象实例

java.lang.ClassLoader cl = r.packageInfo.getClassLoader();

activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent);

}

if(activity !=null) {

ContextImpl appContext =newContextImpl();//创建一个Activity实例

appContext.init(r.packageInfo, r.token,this);//初始化该ContextIml实例的相关属性

appContext.setOuterContext(activity);//将该Activity信息传递给该ContextImpl实例

...

}

...

}0b1331709591d260c1c78e86d0c51c18.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓c语言获取context,Android中Context详解 ---- 你所不知道的Context 的相关文章

随机推荐

  • 记elementUI的popover出现在页面左上角

    找了好久找不到解决办法 给自己记一下 目标 出现在目标元素左侧 出现情况 出现在了页面左上方 产生原因 导入文件 文件导入后跟后端要上传失败的条数 封装了一个组件 只要有数字大于0 elpopover立马出现 但是向后端发起请求在导入成功十
  • Redis建集群时出现[ERR] Sorry, can‘t connect to node的错误

    Redis建集群时出现 ERR Sorry can t connect to node的错误 原因是由于Redis设置密码 无法连接 但由于Redis不设置密码容易被入侵 因此需要找到ruby中的配置文件加入密码的配置 先要安装ruby和r
  • mysql使用sql备份单个表

    1 复制表结构及数据 1 1第一种方式 create table A backup select from A 基于GTID复制会报错 1786 Statement violates GTID consistency CREATE TABL
  • androidx.lifecycle 中 ViewModelProviders 源码学习

    如果在学习 LiveData 其中需要ViewModelProviders 会出现爆红 找不到该类的方法 那是没有导入相关库 如下 implementation androidx lifecycle lifecycle viewmodel
  • 停止Tomcat报错:java.net.ConnectException: 拒绝连接 (Connection refused)

    问题描述 今天在部署项目时 发现停止tomcat的过程中抛出了异常 java net ConnectException 拒绝连接 Connection refused 几次尝试 项目中写的有定时任务 所以猜测是定时任务导致项目停止失败 解决
  • java操作excel表格详解

    在日常工作中 对Excel工作表格的操作处理可是多的数不清楚 下面是java语言对其的操作 有需要的小伙伴可以参考下 使用场景 1 将用户信息导出为excel表格 导出数据 2 将Excel表中的信息录入到网站数据库 习题上传 大大减轻网站
  • 【爬虫+可视化】Python爬取疫情数据,并做可视化展示

    知识点 爬虫基本流程 json requests 爬虫当中 发送网络请求 pandas 表格处理 保存数据 pyecharts 可视化 开发环境 python 3 8 比较稳定版本 解释器发行版 anaconda jupyter noteb
  • MPI 和OPENMP 混合编程 实现矩阵LU分解

    LU分解 将系数矩阵A转变成等价两个矩阵L和U的乘积 其中L和U分别是下三角和上三角矩阵 当A的所有顺序主子式都不为0时 矩阵A可以分解为A LU 且分解唯一 其中L是单位下三角矩阵 U是上三角矩阵 方法 使用openMP和MPI混合编程现
  • Jeesite开发平台限制用户多点登录

    Jeesite开发平台限制用户多点登录 授权查询回调函数 进行鉴权但缓存中无用户的授权信息时调用 Override protected AuthorizationInfo doGetAuthorizationInfo PrincipalCo
  • web前端性能优化

    1 图片处理 图片压缩 使用图片图片压缩 优化工具TinyPNG TinyJPG压缩图片 或者使用其Gulp 组件gulp tinypng结合到自动化构件流程中 图片格式转为base64 使用webpack的url loader 自动根据文
  • MyBatis 的架构

    MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架 可以将 SQL 语句和 Java 代码进行分离 通过 XML 或注解的方式配置 SQL 语句并执行 从而实现数据访问的功能 MyBatis 的架构包括以下几个部分
  • Mysql 实战之——读写分离方案

    Linux环境 Centos 6 8 64 bit Mysql 版本 5 1 7 一 准备工作 部署Mysql主从复制 二 使用Amoeba数据库代理来实现读写分离 Amoeba作为数据库代理 以中间件的形式存在 拓扑图如下所示 Amoeb
  • cad多个窗口并排显示_CAD的入门小技巧

    在CAD中可以绘制二维 三维图形 也可以对图纸中的图形进行标注和进行渲染 比较广泛的应用于建筑 机械 环境工程 电子 设计等一些行业 启动与退出启动 1 在桌面双击CAD图标2 开始 程序 Autodesk Autodesk CAD CAD
  • got an unexpected keyword argument 'xxx'

    这几天在捣鼓pyecharts的地图功能
  • Windows Mobile 设备中心 for vista 一览

    2007年06月21日 14 30 00 Microsoft Windows Mobile 设备中心 6 1 在6月6日发布了最新版 今天为了能在Vista开发PPC 或Wince设备 程序 下载安装了该程序 启动后界面确实很炫 和媒体中心
  • 【论文合集】2022年11月医学影像期刊论文合集

    本月IEEE Transactions on Medical Imaging 1区 top if 11 037 共41篇 Medical Image Analysis 1区 top if 13 828 共47篇 标题高频词汇 segment
  • Non-terminating decimal expansion; no exact representable decimal result.

    日志信息 问题分析 由于 BigDecimal 是不可变的 任意精度的有符号十进制数 所以可以做精确计算 但在除法中 准确的商可能是一个无限长的十进制扩展 例如 1 除以 3 所得的商 若我们在做除法时 没有指定舍入模式 无法表示为准确的结
  • C# 串口通信 stm32 电机

    前几天已经完成了stm32通过PWM对电机的控制 这几天趁上班之余 也完成了c 通过串口通信控制电机的运行 界面如下 好久没写文章了 发现非常不擅长分享和表达 第一反应是演示出来 可惜这里不能有动画 功能不强大啊 哪天有空了 把上位机代码和
  • json库 nlohmann/json 的基本使用

    C 的json库有很多 但nlohmann 链接 https github com nlohmann json 大概是目前使用最方便的跨平台json库了 其可以让用户以modern C 的方式解析和构建json 性能比rapidjson库略
  • 安卓c语言获取context,Android中Context详解 ---- 你所不知道的Context

    二 什么时候创建Context实例 熟悉了Context的继承关系后 我们接下来分析应用程序在什么情况需要创建Context对象的 应用程序创建Context实例的 情况有如下几种情况 1 创建Application 对象时 而且整个App