在我看到的各种Android代码中:

 public class MyActivity extends Activity {
    public void method() {
       mContext = this;    // since Activity extends Context
       mContext = getApplicationContext();
       mContext = getBaseContext();
    }
 }

然而,我找不到任何像样的解释,说明哪种方式更可取,在什么情况下应该使用哪种方式.

如果 Select 了错误的文档,并提供了关于什么可能会损坏的指导,我们将不胜感激.

推荐答案

我同意,在Android环境中,文档很少,但你可以从各种来源拼凑出一些事实.

Google Android开发者官方博客上的This blog post主要是为了帮助解决内存泄漏问题,但也提供了一些关于上下文的好信息:

在常规的Android应用程序中,您 通常有两种上下文, 练习和apply.

进一步阅读这篇文章讲述了两者之间的差异,以及当您可能想考虑使用应用程序上下文(Activity.getApplicationContext())而不是使用活动上下文this时.基本上,应用程序上下文与应用程序相关联,并且在应用程序的整个生命周期中始终保持不变,因为活动上下文与活动相关联,并且在屏幕方向更改等过程中,活动被销毁时,可能会多次被销毁.

除了开发Android SDK的谷歌工程师黛安·哈克伯恩(Dianne Hackborn)的一篇帖子外,我真的找不到任何关于何时使用getBaseContext()的东西:

不要使用getBaseContext(),只需使用

这来自android-developers newsgroup上的一个帖子,你可能也想考虑在那里问你的问题,因为有一小部分Android工作人员实际监控着那个新闻组,并回答问题.

因此,总的来说,在可能的情况下使用全局应用程序上下文似乎更可取.

Android相关问答推荐

懒惰列的滚动到项目不按预期工作'

理解修饰符<;方法>;与修饰符<;方法>;:效果和行为解释(Android开发者Jetpack Compose)

在Android上使用XSLT文件转换XML文件

原因平滑滚动的滞后懒惰列在android jetpack compose

如何在Android Jetpack Compose中找到我的手机屏幕一行有多少个单词

Android 11:在try 获取文件的永久权限后,仍然没有读写权限

如何从URI中获取图像大小

如何隐藏OutlinedTextField边框上的提示标签

由于Xcode运行脚本阶段没有指定输出,在IOS Emulator中的KMM项目中生成失败

从不可组合回调打开可组合屏幕

使用lazyColumn迁移paging3的旧代码

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

我如何比较多个时间范围并在 Android Compose 中并排显示它们

Electric Eel 后 Gradle 项目同步失败 | 2022.1.1更新

如何在 Jetpack Compose 中向图像视图添加对角色带?

处理程序 postDelayed 方法不起作用,kotlin 应用程序卡在启动画面上

Android活动系统导航栏 colored颜色 ?

android 13 版本是否会影响 android 12 目标应用程序

Android Studio Emulator Internet 连接问题仅是第一次

在 Android Studio 中替换字符串中的 "