在Android小部件类中使用静态成员是否正常?

时间:2012-12-18 08:47:35

标签: java android static android-widget android-sqlite

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

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

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

  3. 代码示例

    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++;
        }
    
    };
    

1 个答案:

答案 0 :(得分:3)

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