如何以及在AppWidgetProvider中存储持久对象(如数据库适配器)?

时间:2012-05-28 16:52:28

标签: android persistence broadcastreceiver appwidgetprovider

我正在开发主屏幕小部件,我正在使用android sqlite数据库。我使用简单的方法(添加,删除,获取记录......)实现了一个简单的类DBAdapter来处理数据库工作。它有效,但现在我正在考虑如何做到这一点的最佳方式。

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

我在想这个选项:make DBAdapter singleton clas或者使用static class&方法,另一种选择是使用Gson将DBAdapter存储到sharedPreferences,或者使用序列化。但我宁愿问。这是正确的方法吗?很多

1 个答案:

答案 0 :(得分:0)

  

对我来说,最大的问题是,如何(以及在​​何处)存储我的DBAdapter实例。

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

  

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

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

  

另一种选择是使用Gson将DBAdapter存储到sharedPreferences,或者使用序列化

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