【发布时间】: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