java - 使用公共(public)静态上下文有什么问题吗? (关于 getResources() )

标签 java android

最近,我在尝试在主类之外加载位图时遇到了问题。我发现在我的主类中,我可以将其作为上下文传递给任何给定的函数,从而允许我从该函数中调用 getResources() 。有一些事情对我来说没有意义。

关键字“this”只是指函数正在运行的当前对象,对吗?如果是这样,我如何使用“this”将我的主类作为上下文传递?它甚至没有上下文。我正在使用“extends Activity”,但 Activity 似乎也不包含任何名为 getResources() 的函数。

我找到了一个解决方法,它可以让我更轻松地做我想做的事情,即声明一个公共(public)静态 Context appContext;在我的主课中。然后,在 onCreate() 中我设置 appContext = this;然后,我可以在需要时从其他地方调用 MainActivity.appContext.getResources() 。所以,我真的有几个问题。

  1. 当从 MainActivity 内部将 appContext 设置为“this”时,为什么 MainActivity(我的主类)和 appContext 本质上不是同一件事(不存在 MainActivity.getResources() 之类的东西)

  2. 这样做不安全吗?这会导致我的程序出现任何潜在问题吗?

  3. 是否有一种无需使用 getResources() 即可加载图像的方法?

  4. 在此网站中显示我的代码的正确方法是什么?我习惯的标准([code][/code]标签)似乎在预览中无法正常工作,所以我假设这里的处理方式不同。格式帮助页面说只需使用四个空格,但这在预览部分似乎也没有显示任何差异。

编辑: 我刚刚在另一个帖子中读到有人说

now everything depends on your main activity's onCreate method having been called.

这让我开始思考。什么情况下onCreate不会被调用?似乎如果不调用它,程序将在许多方面停止正常工作,这与在其中初始化静态变量无关(即不会调用 setContentView)。

因此,假设这样做没有任何问题,我能发现的唯一缺点是“MainActivity.appContext.getResources()”需要输入很多内容才能调用函数。有没有办法为此创建一种别名?我想我可以创建一个简单地调用它的函数,但这看起来很愚蠢。

最佳答案

如果你看here您会看到 activityContext 的子类。

您可以使用反引号格式化代码,或者仅使用编辑器上的 {} 按钮。请参阅markdown manual了解更多信息。

关于java - 使用公共(public)静态上下文有什么问题吗? (关于 getResources() ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780582/

相关文章:

java - private OnClickListener clickFunction = new OnClickListener(){stmt; }

Android 2D图形游戏引擎?

android - 如何从 JNI 调用 C++ 方法

java - 结果似乎不对

java - 这是使用自定义数据注释的正确方法吗?

java - 当您将鼠标悬停在 Java 中的文本字段上时,有没有办法显示类似 "cloud"的弹出窗口?

java.lang.NoClassDefFoundError : jdk/nashorn/api/scripting/NashornScriptEngineFactory

android - onCreate 中的方法仅在设备旋转后运行

javascript - Jquery $.ChangePage 回调 Android

android - Genymotion - 虚拟设备没有 IP 地址