在我的应用程序(SyncAdapter)中,我包含许多ContentProviders以供其他应用程序使用,并且想知道尝试在它们之间共享单个SQLiteOpenHelper实例是否合适?如果是这样,怎么样?
如果这不合适,那么(在示例中似乎表明)在每个ContentProvider的onCreate方法中重复实例化SQLiteOpenHelper是否正确;好像应该有更好的方法!
操作系统的清单中是否有足够的信息来实例化ContentProviders而不首先创建其包含的应用程序?如果是这样,那么我就无法在扩展Application以供ContentProviders检索的类中保存静态SQLiteOpenHelper。
帮助!
答案 0 :(得分:0)
答案是将我的ContentProviders合并到一个ContentProvider中,该ContentProvider被连接起来处理我的各种URI /表;这是Google自己的example。这样,您可以实例化SQLiteOpenHelper并将其设置为一个字段,供您重写的方法使用,再次参见示例。顺便说一下,我从该代码中获取的另一个好的(为了最佳实践)模式是:覆盖applyBatch来包装它在事务中所做的一切。此后,只要你想做任何持久性,就只使用它(通过.IntentProviderOperations);如果你这样做,你可以省略实际覆盖更新,删除和插入方法的事务 - 因为你不会直接使用它们!后者吸引我,因为它简化了我的插入,更新和删除方法,并确保在抛出异常时可以轻松回滚整个相关更改序列。