context和getApplicationContext()介绍

在android中常常会遇到与context有关的内容浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,在这里我们传入的是this,那么这个this究竟指的是什么呢? 这里的this指的是Activity.this,是这个语句所在的Acti

大家好,又见面了,我是全栈君。

在android中常常会遇到与context有关的内容,大多都是作为参数在传递,但是它的作用究竟是什么呢

先说它的用法,举个例子

在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的参数就是一个context,在这里我们传入的是this,那么这个this究竟指的是什么呢? 这里的this指的是Activity.this,是这个语句所在的Activity的this,是这个Activity 的上下文。网上有很多朋友在这里传入this.getApplicationContext(),这是不对的。 AlertDialog对象是依赖于一个View的,而View是和一个Activity对应的。 于是,这里涉及到一个生命周期的问题,this.getApplicationContext()取的是这个应用程序的Context,Activity.this取的是这个Activity的Context,这两者的生命周期是不同的,前者的生命周期是整个应用,后者的生命周期只是它所在的Activity。而AlertDialog应该是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入this.getApplicationContext(),就表示它的生命周期是整个应用程序,这显然超过了它的生命周期了。 所以,在这里我们只能使用Activity的this。

 

下面具体解释它的内涵

其实Activity.this就是context的一个具体,Activity.this是你当前所在的activity的上下文,this.getApplicationContext()取得的是整个应用的上下文,在你把他们作为参数传递的时候,多数是用来标注你要在哪个activity里面进行操作,比如上文提到的AlertDialog.Builder builder = new AlertDialog.Builder(this);你是要在当前的activity里面创建对话框,如果传递的是this.getApplicationContext(),这是整个应用的上下文,代码怎么会知道你想在哪个具体的activity里面创建对话框呢,所以,在这里应该传入的是你想创建对话框的那个activity的上下文,即Activity.this.如果这你都理解了,那么你也该明白,每个activity都有自己的上下文,而整个应用只有一个上下文.

 

总结

getApplicationContext()
返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁。

Activity.this 

返回当前activity的上下文,生命周期只是它所在的Activity,activity 摧毁他就摧毁

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121459.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月9日 上午11:00
下一篇 2022年3月9日 上午11:00


相关推荐

  • PHP函数microtime()

    定义和用法PHP函数microtime()返回当前Unix时间戳和微秒数。PHP函数microtime()语法microtime(get_as_float)PHP函数microtime()参数与描

    2021年12月20日
    51
  • 【智能家居篇】wifi网络接入原理(上)——扫描Scanning「建议收藏」

    【智能家居篇】wifi网络接入原理(上)——扫描Scanning

    2022年1月22日
    57
  • vs2012安装教程_vs2005安装图解

    vs2012安装教程_vs2005安装图解Microsoft 的安装包怎么会这样呢?昨天做VS2005 Web项目时,不能加载项目,显示无效还是不支持的安装包,网上搜一下,发现是没有打补丁,急忙在微软网站下载VS2005SP1 补丁,下载家里速度是可以,不到半个小完成.当从22:22分开始安装,装到00:35,整整2个多小时,真是郁闷,怎么是这样的安装包呢,完成了倒是可以打开项目了,不提示上面提到的错误!

    2022年10月6日
    6
  • 多台路由器堆叠_h3c路由器堆叠配置命令[通俗易懂]

    多台路由器堆叠_h3c路由器堆叠配置命令[通俗易懂]本次网络的拓扑结构是三台交换机连接到一起,依次为A交换机,B交换机和C交换机。交换机A是主交换机,他通过G1/1接口连接B交换机的G1/1接口,通过G2/1连接C交换机的G1/1。所有G端口都设置为VLAN100。这个A交换机作为主交换机完全是网络管理员自己选择的,实际上我们可以随意的将ABC中的任何一个选择为主交换机,大家根据实际情况选择即可。IP地址与Trunk设置:首先将网络的管理VLAN…

    2022年10月17日
    6
  • Hadoop入门——初识Hadoop

    Hadoop入门——初识Hadoop推荐一个微信商城,扫码即可购买,性价比超高,程序员必备店主就是博主,有任何问题可随时通过商城内的微信与博主取得联系一.hadoop是什么Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务。今年大型IT公司,如EMC、Microsoft、Intel、Teradata、…

    2022年6月2日
    35
  • 1.如何实现MT4帐号同步交易?

    1.如何实现MT4帐号同步交易?使用本跟单EA,可以实现在同一台计算机上运行两个(或更多个)MetaTrader4自动复制交易。您使用其中一个MT4帐号手动交易或者使用EA自动交易,那么其它一个(或更多个)MT4,会立即复制此帐号中的订单。您可以运行多个喊单EA和多个跟单EA,可以实现一个帐号跟多个帐号,或者多个帐号跟一个帐号,又或者多个帐号跟多个帐号。用来喊单的MT4帐号不需要帐号必须拥交易权限,因此,可以使用MT4“投资者”密码登录。投资者密码,又称呼“只读密码、观摩密码”。…

    2022年5月30日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号