1.Android上下文理解

  • Android上下文对象,在Context中封装一个所谓的“语境”,Activity、Service、Application都继承自Context,所以在这三者创建时都会创建应用上下文Content
  • 所有的组件共同拥有Application Context,可以通过getApplicationContext()获取
  • Activity中获取Context对象,直接this,匿名内部类指定XXXActivity.this

Context的作用是用来访问全局信息的,比如每个UI组件的构造函数都是要传入一个Context的。拿TextView来打比方:

TextView textView =newTextView(this);
textview.setText(R.string.balabala);

这里实例化的时候传入了一个this,这个值就是一个Context。

这里设置了一个在strings.xml文件中预定义的字符串,setText(int resid)函数的源码中是这样的:

publicfinalvoidsetText(intresid){
setText(getContext().getResources().getText(resid));
}

注意这里面使用了getContext()函数去获取全局信息资源,并通过id筛选出自己想要的资源。这里的这个getContext()获取到的上下文,就是我们在实例化TextView时传进去的Context。

所以,Context是用来协助对象访问全局信息的。

使用的时候要尤其注意,Context传出去,使用完要及时释放掉,因为Context是有一个引用抓取着Activity的,如果Activity生命周期结束后还没有及时释放掉Context,很容易造成内存泄露。

2.几个常用的上下文

this
  即当前的application或activity或service。

getApplication()
  系统提供的单例对象,每个应用只有一个。只能在activity和service(以及application类)中调用,获得应用的application单例对象。

getApplicationContext()
  getApplicationContext()返回应用的上下文,生命周期是整个应用。相对比getApplication获取的对象是一样的,都是应用的application单例对象,但是应用范围更加广,可以例如broadcast receiver中可以使用。

getBaseContext()
  返回由构造函数指定或setBaseContext()设置的上下文,调用该方法时获取一个ContextWrapper初始化为具体的Application、Service、ContextThemeWrapper的context。不建议使用。

getActivity()
  在fragment中获取fragment从属的activity的context,相当于该Activity的activity.this。存在于该activity的生命周期中。

getContext()
返回当前这个View对象的context。

3.今天培训讲了一点点的activity上下文以及管理的东西。

activity实际上是继承了context的上下文,只是他自己下面又实现了一些可视化的(不是window、widget)等可视化界面。

activity -> activityThread -> AMS

201709015工作日记--上下文的理解,ASM的更多相关文章

  1. 201709015工作日记--IntentService使用

    一.IntentService与Service的区别 Service 是 Android 四大组件之一,正常来说,我们直接使用 Service 就可以了. 但是 Service 存在几个问题: 默认不 ...

  2. 对于Javascript 执行上下文的理解

    转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么 ...

  3. Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解【转】

    转自:http://blog.csdn.net/laoliu_lcl/article/details/39972459 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不 ...

  4. 对Linux内核中进程上下文和中断上下文的理解

    内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间.现代的CPU都具有不同的操作模式,代表不同的 级别,不同的级别具有不同的功能,在较低的级别中将禁止某 ...

  5. 理解ASM的Extent

    理解ASM的Extent 分类: Oracle 2017-04-14 10:19:44   ASM中分配空间的单位是AU,Extent包含1个或多个AU.在11g之前,1个Extent对应1个AU.而 ...

  6. 201709013工作日记--static理解 && abstract

    1.关于viewHolder设置成static的讨论 一般情况下是尽量不要使用static关键字,因为static一旦有引用变量指向了变量,使用完毕后而没有设置null,就会造成内存泄露,而且很难排查 ...

  7. Linux内核中进程上下文和中断上下文的理解

    參考: http://www.embedu.org/Column/Column240.htm http://www.cnblogs.com/Anker/p/3269106.html 首先明白一个概念: ...

  8. javascript 执行上下文的理解

    首先,为什么某些函数以及变量在没有被声明以前就可以被使用,javascript引擎内部在执行代码以前到底做了些什么?这里,想信大家都会想到,变量声明提前这个概念: 但是,以下我要讲的是,声明提前的这个 ...

  9. SSM工作流程的大致理解

    //不是根据源码来理解的,所以细节有省略.. 首先从在浏览器输入URl的那一刻开始 例如输入 localhost:8080/MyProject/listCategory 初始化: 此时tomcat已经 ...

随机推荐

  1. tcprstat分析服务的响应速度

    Tcprstat 是免费开源的TCP分析工具,可检测网络通信状态,并且计算请求和响应之间的延迟. 它的输出格式类似 linux 的 vmstat 和 iostat 的输出格式.这个工具能够检测到某个端 ...

  2. EasyMock使用总结

    最重要的事说在前面:遇到一个你不熟悉的知识,一定要去官网仔仔细细的看官方文档!一定要仔仔细细!一定要!(尔康鼻孔脸..) 正篇: 一.使用 首先,当然是添加依赖,有人用maven,有人用ant或者ma ...

  3. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL

    今天学习spring+cxf的时候遇到一个问题:在web.xml中配置了spring的上下文监听器: <listener> <listener-class>org.spring ...

  4. MIUI 6的毛玻璃效果的技术实现(实时模糊)

    说说MIUI 6的毛玻璃效果的技术实现.   很久以前我们的文件夹打开和最近任务等几个地方就使用了毛玻璃效果,在技术上讲就是背景模糊.应该是比iOS 7的使用要早很多.不过那时候我们使用的是先对背景截 ...

  5. Python itertools/内置函数

    https://docs.python.org/3.5/library/itertools.html#itertools.starmap // https://docs.python.org/3.5/ ...

  6. intellij idea 的常见配置

    1.视图配置 配置好后如下图:   2.修改字体大小 3.编码修改 4.行号显示 5.控制台字体大小调整 File->Settings->Editor->Colors & F ...

  7. java并发:Semaphore

    Semaphore是常见的同步工具类之一. Semaphore翻译成字面意思为 信号量,Semaphore可以控制同时访问的线程个数,也称为permit(许可). 在构造函数中指定permits个数. ...

  8. iOS 多页面跳转同一页面时数据处理

    如果 同一个界面, 会有10个数据源传进来, 此时 创建 一个总模型fullmodel 存储 10个model 数据, 创建 10个一样的cell, 在 不同数据, 用不同cell处理最好, 千万别于 ...

  9. code1002 搭桥

    最小生成树 每读入一个城市,把他与之前的所有城市做一次link() link的内容: 1.如果两个城市直接相连,合并他们的集合(并查集)2.如果两个城市可以搭桥,添加一条边来连接.如果不可以搭桥,什么 ...

  10. mstsc本地驱动器

    mstsc 可以把本地驱动器 挂载到服务器上