Android context

 

public class Application
extends ContextWrapper implements ComponentCallbacks2 

public abstract class Service
extends ContextWrapper implements ComponentCallbacks2 

public class Activity
extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, View.OnCreateContextMenuListener, ComponentCallbacks2 

public abstract class ContentProvider
extends Object implements ComponentCallbacks2 

public class Fragment
extends Object implements ComponentCallbacks2, View.OnCreateContextMenuListener 

public class View
extends Object implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource 

 

 

要理解这些方法的区别,需要先理解在Android框架中,有两种类别的Context,分别是Application Context和Activity Context:

Application Context:存在于“应用”的整个生命周期,只要应用存在,Application Context就存在,并且是唯一的。当应用被销毁了,Application Context才被销毁。

Activity Context:存在于“Activity”的整个生命周期,当onDestroy()执行后,Activity Context也被销毁。

1.getApplication():虽然它返回的是Application对象,但Application类继承自Context,所以它可以用来提供Application Context;

2.getApplicationContext():返回Application Context;取得的是当前app所使用的application,这在AndroidManifest中唯一指定。意味着,在当前app的任意位置使用这个函数得到的是同一个Context,生命周期是整个应用,应用摧毁,它才摧毁。

3.getBaseContext():返回Activity Context;

4.Activity.this:当前activity的上下文,属于activity, activity是Context子类 ,activity 摧毁context就摧毁;

5.this:表示当前对象;在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this.。

6.getContext():这个是View类中提供的方法,在继承了View的类中才可以调用,返回的是当前View运行在哪个Activity Context中。前面的3个方法可以在Activity中调用。

 

getContext():是Activity 、Service所对应的Context.随着Activity 、Service创建而创建,销毁而销毁,在该Activity 、Service中可以用this代替,在匿名类中使用XXXXActivity.this代替。
getApplicationContext():时Application所对应的Context.贯穿于与整个应用程序生命周期。
getBaseContext():是指在别的Context中访问该类的Context时使用,一般不建议使用。

 

getApplication这个方法只有Activity和Service才有,要想在别的地方获取Application就只能通过getApplicationContext获取。
首先Activity,Service和Application都有getBaseContxet(),getApplicationContext()这两个方法。但没有getContext方法。在Fragment中,才有getContext方法,这个是View类中提供的方法
getApplicationContext和getApplication获取到的也是同一个对象,只是对象的类型不一样。
Context数量 = Activity数量 + Service数量 + 1 (1为Application)


posted @ 2022-09-23 15:51  SaraMorning  阅读(50)  评论(0编辑  收藏  举报