gpt4 book ai didi

java - Android widget类中使用静态成员是否正常?

转载 作者:搜寻专家 更新时间:2023-11-01 09:02:39 26 4
gpt4 key购买 nike

我创建了一个小部件应用程序,我在其中使用 SQLite 数据库对象,该对象在用户启用他的小部件时被初始化。我将数据库对象声明为静态的,因为在其他情况下,它在 onReceive() 方法调用后变为 null 并且我的应用程序崩溃。

现在我在 onReceive() 方法中使用 mDatabase 对象,一切正常,除了:

  1. 在 Widget 中保留数据库的静态成员是正常的还是有更正确的方法来做到这一点?
  2. 在使用应用程序一段时间后(一两天)我的应用程序崩溃了,看起来有些成员变为空(可能是 mDatabase),我想如果你回答我的第一个问题它就会回答第二个也是:)

代码示例

public class Widget extends AppWidgetProvider {

private static DatabaseObject mDatabase = null;
private static int mIndex = 0;

@Override
public void onEnabled(Context context) {
mDatabase = new DatabaseObject (context);
mDatabase.initialize("Some data");
}

@Override
public onReceive(Context context, Intent intent)
{
// Some code ....
mDatabase.getItemAtIndex(mIndex);
mIndex++;
}

};

最佳答案

您不应该在 onReceive() 中进行长时间的操作。您应该启动一个服务 (IntentService) 来更新您的小部件并在那里执行您的数据库工作。另请记住,您的应用程序的 Activity 和服务可能随时被终止,因此您需要处理这个问题。如果您需要访问您的数据库帮助程序类 (DatabaseObject),请将其设置为单例,并且它将在您的进程的 while 生命周期内可用。

关于java - Android widget类中使用静态成员是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com