Android中的context使用(getApplicationContext和Activity.this的区别和使用)

1、首先两者的区别:

  1、getApplicationContext()返回的是应用的上下文,隶属于整个应用,应用结束时才摧毁。

  2、Activity.this返回到是Activity的上下文,隶属于Activiy,当Activity实例摧毁时它就跟着摧毁了。

2、两者的使用:

  1、 getApplicationContext()是跟Windows无关的,所以不能做对话框的上下文,它可以做全局数据操作的上下文。

  2、Activity.this是跟Windows相关的,所以新建对话框的需要使用Activity.this。否则会报错。


3、Context的应用场景



大家注意看到有一些NO上添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?下面一个一个解释:

数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。

数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。

数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)




建议:尽量不要使用getBaseContext()。这里有一篇关于Context的文章比较好大家可以看看


### Android 中 UserActivity 页面 Context Activity区别与联系 在 Android 开发中,`Context` `Activity` 是两个核心概念。以下是它们的区别与联系: #### 1. **Context 的定义与作用** `Context` 是 Android 应用程序的上下文环境对象,它提供了对应用程序资源类的全局信息访问。所有的 Android 组件(如 `Activity`、`Service`、`BroadcastReceiver` 等)都继承自 `Context` 或其子类。通过 `Context`,可以访问应用的资源、数据库、文件系统等[^2]。 #### 2. **Activity 的定义与作用** `Activity` 是 `Context` 的一个子类,表示应用程序中的一个屏幕或界面。每个 `Activity` 都有自己的生命周期,并且可以通过 `startActivity` 或 `startActivityForResult` 方法启动其他 `Activity`。`Activity` 提供了比普通 `Context` 更多的功能,例如管理窗口、视图层次结构等[^3]。 #### 3. **Context Activity区别** - **功能范围**:`Context` 是一个更通用的概念,适用于所有 Android 组件;而 `Activity` 是特定于用户界面的组件。 - **生命周期**:`Activity` 的生命周期与其对应的用户界面直接相关,而 `Context` 的生命周期取决于其实现类(如 `Application` 上下文是全局的,而 `Activity` 上下文仅在其生命周期内有效)[^2]。 - **使用场景**: - 使用 `Activity` 上下文时,通常需要确保该 `Activity` 没有被销毁,否则可能会导致崩溃。 - 使用 `Application` 上下文时,可以避免内存泄漏问题,但无法操作与用户界面相关的功能[^3]。 #### 4. **Context Activity 的联系** - 每个 `Activity` 实例本身就是一个 `Context` 实现,因此可以直接作为 `Context` 使用。 - 在 `Activity` 内部调用 `startActivity` 方法时,实际上是通过 `Activity` 自身的上下文来启动新的 `Activity`。 - 如果从非 `Activity` 的 `Context`(如 `Application` 上下文)启动 `Activity`,则必须指定 `FLAG_ACTIVITY_NEW_TASK` 标志位,以便将新 `Activity` 放入一个新的任务栈中。 #### 5. **代码示例** 以下是一个从 `Activity` 非 `Activity` 的 `Context` 启动 `Activity` 的示例: ```java // 从 Activity 启动另一个 Activity Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); startActivity(intent); // 不需要 FLAG_ACTIVITY_NEW_TASK // 从 Application Context 启动 Activity Intent intent = new Intent(getApplicationContext(), TargetActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须添加此标志 getApplicationContext().startActivity(intent); ``` #### 6. **注意事项** - 如果在非 `Activity` 的 `Context` 中启动 `Activity` 时未添加 `FLAG_ACTIVITY_NEW_TASK` 标志位,可能会导致异常。 - 在传递 `Context` 时,尽量避免使用 `Activity` 上下文以防止内存泄漏,尤其是在长时间运行的任务中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值