Understanding Context In Android Application

什么是Context?

顾名思义,它是应用程序/对象的当前状态的上下文。 它允许新创建的对象了解发生了什么。 通常,你将其称为获取有关程序另一部分(activity 和 package/application)的信息。

而且,Context是系统的句柄,它提供了解析resources,获取数据库和preferences的访问等服务。 Android应用程式有activities。 它就像您的应用程序当前运行的环境的句柄。activity对象继承Context对象。 它允许访问应用程序特定的resources和有关application环境的类和信息。

Android开发中几乎到处都会用到Context,它是Android开发中最重要的事,所以我们必须明白正确使用它。
错误的使用context可能会导致Android应用程序中的内存泄漏。

在android中有很多不同类型的context,所以让我们明白这些是什么,如何使用那些以及何时使用哪一种。

Application Context

它是一个单例的实例,可以通过getApplicationContext()在一个activity中访问。 此context与application的生命周期相关联。 application 的context可用于需要其生命周期与当前上下文分离的context或者将某个context传递到activity范围之外时。

使用示例:如果必须为应用程序创建单例对象,并且该对象需要上下文,则始终传递application的context。
如果您在此处传递activity的context,则会导致内存泄漏,因为它将保留对activity的引用,并且activity不会被垃圾回收。
如果必须在activity中初始化库,请始终传递application的context,而不是activity的context。
只有当你知道需要一个可能比任何其他你可以使用的context时, 才能使用getApplicationContext()。

Activity Context

此context在activity中可用。 此context与activity的生命周期相关联。 当您在activity范围内传递context或者需要将生命周期连接到当前上下文的context时,应使用activity的context。
使用示例:如果必须创建一个生命周期附加到activity的对象,则可以使用activity的context。

ContentProvider中的getContext()

该context是应用程序 的context,可以被使用 类似application 的context。 这可以通过getContext()方法访问。
何时不使用getApplicationContext()?
它不是一个完整的上下文,支持Activity所做的一切。 你若用尝试使用此context的各种功能用于GUI相关将失败。

如果来自getApplicationContext()的上下文保存在您不要清理的调用上创建的内容,它可能会创建内存泄漏。 使用活动,如果它持有某事,一旦活动收集垃圾,其他一切都会冲出来。 应用程序对象在您的进程的生命周期内保持。

总结
在大多数情况下,请使用您正在使用的封闭组件中直接可用的上下文。 只要该引用不超出该组件的生命周期,就可以安全地对其进行引用。 一旦您需要从超出您的“活动”或“服务”的对象中保存对“上下文”的引用,即使临时将该保存的引用切换到应用程序上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值