应用因 "context" 问题而崩溃

App crashes because of "context" issue

我是 android 的新手,在理解上下文和所有概念时遇到了问题。

我有一个包含 3 个活动的小应用程序:

1- 主要 Activity

2-登录Activity

3- 飞溅 Activity

我创建了一些 类,它们是 MainActivity 的一部分,运行 作为它的一部分。 类 之一是数据库助手。数据库助手需要一个上下文才能使用,而我所做的是,在 MainActivity:

public static Context context;

在 onResume 中我这样做:

@Override
public void onResume() {
    super.onResume();

    this.context = this;
}

所有活动工作正常,spalsh 工作,登录工作,一切工作正常。我已经在清单中定义了所有内容。

但是随机地,当我将我的应用 运行 留在后台一段时间并用我的 phone 做其他事情并打开它时,有时它只是崩溃指向一个获取 "context"作为参数。

我能做些什么来解决这个问题吗?

谢谢

用ActivityName.this代替context.Your问题就解决了。

发生这种情况是因为调用该后台任务的 activity 在崩溃时不存在。所以你需要在那里使用应用程序上下文。

简单的方法是

@Override
public void onResume() {
    super.onResume();

    this.context = this.getApplicationContext();
}

是的,您定义的上下文 (public static Context context;) 不应是静态的。 (虽然这不会给您带来问题,但最佳做法是不要将 Context 设为静态。)


您应该阅读有关 What is 'Context' on Android? and 的内容。

避免对 Context 进行静态引用,因为它们可能会导致内存泄漏,您可以阅读此 blog article 了解它。 由于 activity 本身就是一个上下文,您可以使用 ActivityName.this.

将其传递给其他 类

应用程序崩溃,因为您仅使用了 "this" 关键字来分配引用。 "this" 关键字指向当前对象。在后台应用时,"this" 可以引用另一个对象。因此,为避免崩溃,将关键字 "this" 与 activity 名称绑定,例如 "MainActivity.this",其中 MainActivity 是您当前的 activity 名称。