2012-05-28 15 views
0

我正在开发主屏幕小部件,并且我正在使用android sqlite数据库。我用简单的方法(添加,删除,获取记录...)实现了一个简单的类DBAdapter来处理数据库工作。它有效,但现在我正在考虑如何做到这一点的最佳方式。如何以及在AppWidgetProvider中存储持久对象(如db适配器)?

对我来说最大的问题是,如何(以及在​​哪里)存储我的DBAdapter的实例。如果我使用Activity,这将非常简单 - 我将在onCreate方法中创建DBAdapter的实例,并且一切都很好。但现在我没有这种选择,因为我使用AppWidgetProvider和几个IntentServicesAppWidgetProvider(BroadcastReceiver)只能在特定的时间 - 在执行onReceive方法期间生效。 IntentService也会在完成必要的工作后“结束”。那么如何以及在哪里存储我的DBAdapter的实例?我不想每次都创建新的DBAdapter实例。

我在想这个选项:make DBAdapter singleton clas或使用静态类&方法,另一个选择是使用Gson将DBAdapter存储到sharedPreferences,或者使用序列化。但我宁愿问。什么是正确的方法来做到这一点? THX很多

回答

0

对我来说,最大的问题是,怎样(在哪里)来存储我将对DBAdapter的实例。

专业提示:如果不从android.widget.Adapter继承,请不要结束使用Adapter的课程。

我不想每次都创建DBAdapter的新实例。

欢迎您将其设为单身/静态数据成员。但是,一旦你的过程终止,它将消失,无论如何你需要重新创建一个新过程。因此,我建议您只需在您的IntentService中根据需要创建实例。 A DBAdapter“用简单的方法(添加,删除,获取记录...)”应该非常便于实例化。

另一种选择是使用GSON来将对DBAdapter存储sharedPreferences,或者可能使用序列

这是没有意义的。 DBAdapter中的唯一数据值应该是SQLiteOpenHelper(或来自其他来源的SQLiteDatabase),它本身不能被保留。此外,这可能比创建DBAdapter的新实例慢1000倍。

+0

thx,我会按照你的意见;) – qkx

+0

但是,如何做到这一点,如果我需要从乘法服务写入数据库?例如dataservice会定期在后台运行,并向db写入新的数据,而在前台,我正在根据用户做一些写作 - 如果这两个写作都在同一时间(有时会发生),我会得到异常'android.database。 sqlite.SQLiteException:错误代码5:数据库被锁定。现在怎么办?更多细节在这里:http://stackoverflow.com/questions/10798233/concurrent-writing-to-android-database-from-multiply-services – qkx

相关问题