Android Context的区别

本文详细解析了Android中的Context概念,包括其基本定义、不同类型的Context(如Activity、Service、Application Context)及其应用场景,并提供了典型代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Context的区别

context是什么?

context可以翻译为语境、上下文。但是在程序中的含义可以理解为编程环境,就是你正在写的代码所处的环境,比如你在activity里写代码就代表当前activity。

常用的context有三种activity、service、application。他们都继承自contextWrapper,contextWrapper继承自context。

context在获取资源,启动activity,获取服务等地方都需要使用。

activity的context

在activity中,用到context的时候经常传一个this,在activity的内部类里面用到时就需要写activity.this,因为this指的是当前的使用场景。
常见的代码就是:

Intent intent = new Intent(this,newActivity.class);
startActivity(intent);
this.getResources().get...

在内部类启动activity的时候,有时候为了简单快速会写getApplicationContext,但是要注意,如果通过这样启动standard模式的activity会报错:

android.util.AndroidRuntimeException: Calling startActivity() from outside of an 
Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. 
Is this really what you want?

标准模式下的activity会默认进入启动它的activity栈中,ApplicationContext并没有任务栈,所以报这个错误。
根据提示,可以在启动activity时指定flag为FLAG_ACTIVITY_NEW_TASK,这样在启动时会创建新的任务栈。

service的context

service中的context是在service对象创建的时候创建。使用时也可以直接使用this。service中的this,不能用于创建dialog,因为service不可见。

application的context

在activity或者service中可以使用getApplication来获取applicaiton实例,但是这个方法只能在activity或者service中才能调用到。在其他情况下使用,比如BroadcastReceiver中,想要获取application实例就要使用getApplicaitionContext方法,任何一个context实例只要调用getApplicationContext方法都会获取到applicaition对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值