在写安卓代码时,经常遇到好多方法需要传context这个参数,而经常用关键字this来传,context这个参数怎么理解?为何需要传这个参数,为何用this来传?
比如Toast.maketext(this,"显示消息",Toast.LENGTH_LONG).show();这里就用到了传context参数,而且用this来传,当在匿名内部类实现Button点击时传context需要用MainActivity.this来传,为何需要加MainActivity?
对 context 上下文的解释网上能够搜索到很多,一两句话不好说明白。这里简单解释下题主字面问题
问题1.
为何用this来传? 能够传递this作为上下文的,通过继承树可以看到是context 类的衍生类
而且Context 有ApplicationContext ,activityContext,Service Context等,生命周期也不一样,Application Context生命周期最长。
传递this,第一是方便,第二是可以和当前组件的生命周期绑定一起,避免了内存泄露。这就是为什么应用中较少使用Application 的 Context的原因。
问题2,
匿名内部类实现Button点击时传context需要用MainActivity.this来传
匿名内部类中this,代表的并非Context,而是匿名内部类本身,这里是为什么使用 MainActivity.this,而不是this的原因
当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context。
Context是一个抽象基类,我们通过它访问当前包的资源(getResources、getAssets)和启动其他组件(Activity、Service、Broadcast)以及得到各种服务(getSystemService),当然,通过Context能得到的不仅仅只有上述这些内容。对Context的理解可以来说:Context提供了一个应用的运行环境,在Context的大环境里,应用才可以访问资源,才能完成和其他组件、服务的交互,Context定义了一套基本的功能接口,可以理解为一套规范,而Activity和Service是实现这套规范的子类,这么说也许并不准确,因为这套规范实际是被ContextImpl类统一实现的,Activity和Service只是继承并有选择性地重写了某些规范的实现。
this表示当前类的意思
一楼已经解答的很详细了。
Context 简单的理解就是 上下文, 它以及它的实现类(ContextImpl) 封装好了一系列的方法。
例如你说的Toast.makeText( Context context...), 这个方法里会使用 context 创建一个Toast 对象,
而使用这个Toast对象,需要知道是哪个应用弹出 , 以及它的实现需要其它应用参与,这些功能正是通过context 直接或者间接完成