context理解

官方文档的解释是:Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型。同时启动应用级的操作,如启动Activity,broadcasting和接收intents。

常用的Context的子类是Activity和Service,我们可以将context理解为类似于Window下的句柄,但Window下的句柄,每个资源都可以是一个句柄,比如一个控件、图片等等,但在android中context只能是Activity和Service等这一类。如果要在Activity中新建一个dialog,在这个dialog中要添加一个控件,要给这个控件传递一个context参数,只能是Activity的实例,不能是这dialog,因为控件的事件需要activity来处理。所以context是一个统领一些资源(应用程序环境变量等)的上下文(理解为句柄)。

我们在一个activity中有如下代码:

Toast.makeText(null, "", Toast.LENGTH_LONG).show();  

那么程序运行时会有空指针异常,就是因为第一个参数Context类型,我们传了null,这样运行到这段代码时,系统不知道activity的环境变量,所以就会出错。

时间: 2024-11-04 17:37:48

context理解的相关文章

BFC(Block Formatting Context)理解

BFC:即块级格式上下文:在创建BFC的情况下,则所属的作用环境就变成了一个独立的布局环境. 在BFC中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin 值所决定的. 在一个BFC中,两个相邻的块级盒子的垂直外边距会产生折叠. 在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left) (对于从右到左的格式来说,则触碰到右边缘). 如何创建BFC 当一个HTML元素满足下面条件的任何一点,都可以产生Block F

Context都没弄明白,还怎么做Android开发?

Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明.Android程序不像Java程序一样,随便创建一个类,写个main()方法就能运行,Android应用模型是基于组件的应用设计模式,组件的运行要有一个完整的Android工程环境,在这个环境下,Activity

OpenGL 渲染上下文-context

context理解 OpenGL在渲染的时候需要一个Context,这个Context记录了OpenGL渲染需要的所有信息,可以把它理解成一个大的结构体,它里面记录了当前绘制使用的颜色.是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态和状态属性.在OpenGL 3.0版本之前,OpenGL创建Context都是一致的,随着升级会新增一些内容(例如从OpenGL1.1升级到1.5,会新增一些状态变量或者属性,并添加一些设置这些内容的函数),整体上来说没有什么大的变化.但是

什么是架构

什么是软件架构 前言:软体设计师中有一些技术水平较高.经验较为丰富的人,他们需要承担软件系统的架构设计,也就是需要设计系统的元件如何划分.元件之间如何发生相互作用,以及系统中逻辑的.物理的.系统的重要决定的作出.在很多公司中,架构师不是一个专门的和正式的职务.通常在一个开发小组中,最有经验的程序员会负责一些架构方面的工作.在一个部门中,最有经验的项目经理会负责一些架构方面的工作.但是,越来越多的公司体认到架构工作的重要性. 什么是软件系统的架构(Architecture)?一般而言,架构有两个要

Android开发经典笔试面试题汇总(持续更新中)

1.我们都知道Handler是线程与Activity通信的桥梁,假设线程处理不当.你的机器就会变得非常慢,那么线程销毁的方法是:(A) A. onDestroy() B. onClear() C. onFinish() D. onStop() 理解:正确销毁线程的方法应该是handler.removeCallBacks(). 2.SharedPreferences保存文件的路径和扩展名是:/data/data/package_name/shared_prefs/ *.xml. 3.Android

Android动态加载Activity原理

activity的启动流程 加载一个Activity肯定不会像加载一般的类那样,因为activity作为系统的组件有自己的生命周期,有系统的很多回调控制,所以自定义一个DexClassLoader类加载器来加载插件中的Activity肯定是不可以的. 首先不得不了解一下activity的启动流程,当然只是简单的看一下,太详细的话很难研究清楚. 通过startActivity启动后,最终通过AMS进行跨进程回调到ApplicationThread的scheduleLaunchActivity,这时

创建一个dynamics 365 CRM online plugin (七) - plugin当中的Impersonation角色

我们之前创建的plugin都是使用default的 run in User's Context. 理解就是使用正在登陆的security context用户信息 那有个问题,如果当前用户的security role没有相应的权限访问功能,我们就要安排一个新的用户 e.g. admin来记录信息而非当前用户. 让我们在registration tool更新TaskCreate class之后再CRM中打开新建Contacts. 我们可以打开activities发现follow up 里用户更改为在

JAVA工程师技能要求

近期做了个JAVA工程师分类, JAVA工程师可能是市场上最多类的程序员:   初级JAVA工程师的基本要求 Good basic programming skills 良好基本编程技能 Foundational Java knowledge JAVA基础知识 Object-Oriented Programming 面向对象编程 Learning on the job  工作中持续学习 Following instructions and receiving feedback 听从指示与反馈 T

全面理解Context

(一).Android源码分析-全面理解Context (二).Android技术精髓-理解Context [源码]