因为我注意到不推荐使用SimpleCursorAdapter类,我现在应该利用我真正喜欢的新Loader API,但是当我尝试这样做时,我发现CursorLoader只适用于ContentProvider。
现在我的问题是,我真的需要内容提供商吗?甚至官方指南也说:
如果您不打算与其他应用程序共享数据,则无需开发自己的提供程序。但是,您需要自己的提供商在您自己的应用程序中提供自定义搜索建议。如果要将复杂数据或文件从应用程序复制并粘贴到其他应用程序,还需要自己的提供程序。
而且我认为我不需要任何这个+因此会产生不必要的复杂性。 那么..我应该怎么做,破解我自己的CursorLoader只能使用像我这样的数据库(CursorLoader usage without ContentProvider),老实说我真的不喜欢,或者我应该把它搞砸并顺从制作提供商?
谢谢!
答案 0 :(得分:4)
您可以撰写Loader
(或使用CommonsWare
的{{3}})来直接查询SQLiteDatabase
。文档是正确的,因为如果您的应用只需要对本地数据的简单访问(而不是与不同的进程/应用程序共享该数据),您实际上并不需要ContentProvider
。
尽管如此,ContentProvider
确实提供了一些好处。例如,您需要使用SyncAdapter
来实现SearchManager
或搜索界面。我尝试将这些结合到我的应用程序中,所以我发现自己一直在实现ContentProvider
。 ContentResolver
还提供了一种在进行更改时向底层数据源提供全局通知的简便方法。例如,CursorLoader
会在其ContentObserver
上注册Cursor
,导致Cursor
在您给定的{{1}上调用ContentResolver#notifyChange(Uri uri, ContentObserver observer)
时收到通知}}。如果您要直接从Uri
加载数据,那么设置它需要更多的工作。
答案 1 :(得分:1)
两种选择都和其他选项一样好。这是一个偏好的问题。
就我个人而言,我认为将内容提供商用于不会与其他应用程序共享任何内容的应用程序令人讨厌并且是一种痛苦的背后,但我在采访中听到了一个有效的建议(来自开发人员)那些大型创业类型的应用程序,如Pocket或Flipboard)表示:“即使一开始可能听起来很复杂,也可以用Android方式编写代码,因为它将来会节省时间/精力” 我认为建议集中在使用推荐方式,获得支持,修复bug以及更快更容易扩展的事实上。