context(Activity的Context和Application的Context)

context(Activity的Context和Application的Context)

一.

Android系统的角度来理解:Context是一个场景,代表与操作系统的交互的一种过程。

从程序的角度上来理解:Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。

二.

XXXActivity.this与getApplicationContext的区别,前者是XXXActivity的对象,后者是项目的Application的实例。

三.

使用context时,注意内存泄漏,如果一个对象,长久的持有一个Context对象,比如下面

static A a = new A(context);

如果此context是Activity的对象,那么只要这个项目没有被关闭,则此Activity无法被回收掉,造成内存泄漏

可以使用context.getApplicationContext(),传入整个项目的context,就不会发生泄漏了

static A a = new A(context.getApplicationContext());

四.

下图出自(http://blog.csdn.net/lmj623565791/article/details/40481055,出自:【张鸿洋的博客】)

img

可以看到Application不应该去拿来做UI的操作,应该使用Activity作为context来处理,其他的比如Service,Activity,Application等实例都可以使用。只是注意Activity容易出现内存泄露问题。

五.Context数量

Context一共有Application、Activity和Service三种类型:

	Context数量 = Activity数量 + Service数量 + 1 

上面的1代表着Application的数量,因为一个应用程序中可以有多个Activity和多个Service,但是只能有一个Application。

六.Android获取各种Context

  1. getApplicationContext(); 返回一个

  2. getBasecontext(); 如在onClick回调中,不能使用this时,可以使用此方法表示当前context

  3. getApplication(); 只能被Activity和Service使用,

  4. getParent() : 返回activity的上下文,当在子视图里面调用的话就返回一个带有子视图的activity对象

  5. getActivity(); 在fragment中使用,返回该fragment所依附的activity上下文

  6. this 记住Activity,Service类,Application类是继承自Context类的,所以在有的时候需要上下文,只需要使用this关键字即可,但是有的时候再线程里面,this关键字的意义就改变了,但这个时候如果需要上下文,则需要使用 类名.this,这样就可以了

    《参考:https://www.cnblogs.com/chenxibobo/p/6136693.html 作者:chenxibobo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值