【问题标题】:MainActivity context AndroidMainActivity 上下文 Android
【发布时间】:2022-01-22 03:49:57
【问题描述】:

我需要获取 MainActivity 上下文并调用 getIntent() 来处理启动 Activity 的意图。

由于某些原因,我不想在我的 MainActivity 中执行此操作(在类的任何非静态方法中,这将是一个简单的 getIntent())。

MainActivity 的实例将被暴露(以某种方式),并且使用该对象,我需要调用 getIntent()。

有以下方法:

public class MainActivity extends Activity {
  
  // Store the activity context
  private static Activity activityContext;

  public void onCreate() {
    activityContext = this;
  } 

  public static Activity getActivityContext () {
    return activityContext;
  }
}

但是还有其他方法可以获取 MainActivity 上下文吗?就像对 Activity 实例的直接 func 一样,而不是捕获实例并公开方法,如上所示..

【问题讨论】:

  • 看起来你的问题出在你的结构上。您的Intent 不应在提供它的Activity 的上下文之外使用。 Activities 本身并不是静态的,因此依赖在检索时可能存在也可能不存在的静态引用是一种彻头彻尾的坏习惯。问题是您为什么要尝试在静态上下文中访问它? Due to some reasons,是什么原因?
  • 永远不要将 Activity 放在静态变量中。它会造成大量内存泄漏。而且你不能依赖只有一个 Activity 实例,所以这样做无论如何都会导致无效的结果。如果需要在另一个类中使用 Intent,请在 Activity 中获取它并将其传递到它需要去的地方。
  • @avalerio,我有本地库,他们有自己的事情要做。之后我想处理这些意图。
  • @GabeSechan 你在说什么内存泄漏?我只捕获已经实例化的活动? “而且你不能依赖只有一个 Activity 实例,所以这样做无论如何都会导致无效的结果。” - 好的,我明白了。
  • 我了解存储在静态变量中的问题...一个活动可能会被实例化两次。因此,建议的方法(和最佳实践)是在 onCreate 中执行 getIntent 并在其中自行处理。对吗?

标签: java android android-activity


【解决方案1】:

onCreate 中检索Intent,从中取出您需要的所有内容,然后您可以将其存储在多个位置。

SharedPreferencesDatabaseStatic VariablesSingleton

当您最终需要 Intent 数据时,您可以从更永久的地方提取它,而不是从不是的 Activity 提取。

【讨论】:

  • 与此类似,可能还有许多其他的 DO 和 DONT。你知道有什么地方可以让新手了解所有这些吗?我遵循了 Activity 的文档,但不知道您不应该这样做。
  • 看到您已经在使用本机库,您可能已经跳入了深渊。这实际上是关于关注点分离。 Activities/Fragments 被视为Android 中的ViewsIntent 是数据,数据不属于View,只显示在其中。至于使用静态上下文,Android Studio 应该已经给你一个 lint 警告,不要忽略它。静态实例通常在编程中通常不受欢迎,因此使用它应该是您尝试的最后一件事。如果您不确定在这里提出问题,请尝试编写干净的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2022-01-10
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多