2

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

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

  1. 将数据库的静态成员保留在小部件中是否正常,或者有更正确的方法可以做到这一点?
  2. 在使用应用程序一段时间后(一两天),我的应用程序崩溃了,看起来有些成员变成了 null (可能是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++;
    }

};
4

1 回答 1

4

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

于 2012-12-18T08:58:52.103 回答