我对android非常陌生,并且在掌握上下文和所有内容的概念时遇到了问题。
我有一个小应用程序,包含3个活动:
1-主要活动
2-登录活动
3-启动活动
我创建了许多属于MainActivity的类,并作为其中的一部分运行。其中一个类是数据库助手。在MainActivity中,数据库助手需要使用上下文,我需要做什么:
public static Context context;
在onResume中我做:
@Override
public void onResume() {
super.onResume();
this.context = this;
}
所有活动都很好,spalsh工作,登录工作,一切正常。我已经在Manifest中定义了所有内容。
但随机地,当我让我的应用程序在后台运行一段时间并使用我的手机进行其他操作并打开它时,有时它只是崩溃指向一个功能得到" context"作为一个论点。
我能做些什么来解决这个问题吗?
由于
答案 0 :(得分:2)
避免对Context进行静态引用,因为它们可能导致内存泄漏,您可以阅读此blog article。
由于活动是一个上下文本身,您可以将其传递给ActivityName.this
的其他类。
答案 1 :(得分:1)
使用ActivityName.this替换context。你的问题将会解决。
答案 2 :(得分:1)
这种情况正在发生,因为调用该后台任务的活动在崩溃时不活动。所以你需要在那里使用Application Context。
这样做的简单方法是
@Override
public void onResume() {
super.onResume();
this.context = this.getApplicationContext();
}
是的,您定义的上下文(public static Context context;
)不应该是静态的。 (虽然这对您没有造成问题,但最佳做法是不要将Context设为静态。)
您应该阅读What is 'Context' on Android?和App crashes because of "context" issue。
答案 3 :(得分:1)
应用程序崩溃,因为您只使用“this”关键字来分配引用。 “this”关键字指向当前对象。在后台应用时,“this”可以引用另一个对象。因此,要避免崩溃,请将关键字“this”与活动名称绑定,例如“MainActivity.this”,其中MainActivity是您当前的活动名称。