201709015工作日记--上下文的理解,ASM

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

时间: 2024-10-27 05:25:50

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

对于Javascript 执行上下文的理解

转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数以及变量在没有被声明以前就可以被使用,以及它们的最终的值是怎样被定义的. 什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 – 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 – 当执行一个函数时,运行函数体

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

参考: http://www.embedu.org/Column/Column240.htm http://www.cnblogs.com/Anker/p/3269106.html 用户空间与内核空间 有了用户空间和内核空间,整个linux内部结构可以分为三部分,从最底层到最上层依次是:硬件-->内核空间-->用户空间.如下图所示: 需要注意的细节问题: (1) 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据.不管是内核空间还是用户空间,它们都处于虚拟空间中.

开始学习Spring Boot,启动类的注解(一)(工作日记)

这个博客的目的只是为了给懒惰的自己学习知识的时候总结用 喜欢高深的知识的人请到别的空间,谢谢!!! 虽然已经经历了两个Spring Boot项目了,但是仍然不知道自己在干什么,它是怎么实现的,完全不清楚. 因此在网上看了一些人的资料,决定根据自己的理解,写下这一篇博客,就当作工作日记吧!!! 说说Spring Boot的感受,感觉很方便,部署环境很快,在工作中我基本都是复制一个已经有的模块,删减掉我不用的文件,改一下pom文件,属于自己的模块就出来了. 之后maven加载一下需要的jar包,之后

2014.7.9工作日记

条件编译 #if (PHONE_TYPE == T46_TYPE)#define LINEKEY_PERPAGE_COUNT    9#elif (PHONE_TYPE == T48_TYPE)#define LINEKEY_PERPAGE_COUNT    9#elif (PHONE_TYPE == T42_TYPE || PHONE_TYPE == CPX_TYPE)#define LINEKEY_PERPAGE_COUNT    5#endif 2014.7.9工作日记,布布扣,bubuk

工作日记-4 Redis

Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持. 工作日记-4 Redis

工作日记-2 JS比较日期大小

function comptime(beginTime, endTime) { var beginTimes = beginTime.substring(0, 10).split('-');    var endTimes = endTime.substring(0, 10).split('-'); //parse方法要求短日期可以使用“/”或“-”作为分隔符,但是必须用月/日/年的格式来表示    //使用"/"兼容IE和Firefox    beginTime = beginTim

理解ASM的Extent

理解ASM的Extent 分类: Oracle 2017-04-14 10:19:44 ASM中分配空间的单位是AU,Extent包含1个或多个AU.在11g之前,1个Extent对应1个AU.而从11.1.0开始,Oracle引入了Variable Sized Extents,ASM会根据文件的大小,自动决定Extent的大小,具体算法如下:1.AU小于4MB的: 头20000个Extent(0-19999,20GB),Extent大小=1*AU 之后的20000个Extent(20000-3

BFC--对块级格式化上下文的理解

* { } html,body { width: 100%; background: #fff } .c333 { color: #333 } .container { width: 80%; margin: 0 auto; font-size: 16px; color: #666 } h3 { font-size: 35px !important; color: #333; text-align: center !important } p { line-height: 25px; margi

python写个简单的记工作日记的脚本并打包为EXE

1 win10系统,代码: #!/usr/bin/python # -*- coding: UTF-8 -*- import time import tkinter as tk import tkinter.font as tf import webbrowser as web def save(): with open(di, mode='a', encoding='UTF-8') as fw: # 打开文件 txt = T1.get('1.0', 'end')#全选 if len(txt.s