android - 不会共享的应用程序是否需要内容提供程序?

标签 android android-contentprovider android-cursorloader

因为我注意到类 SimpleCursorAdapter 已被弃用,我现在应该利用我非常喜欢的新加载器 API,但是当我尝试这样做时,我发现 CursorLoader 只能与 ContentProvider 一起使用。

现在我的问题是,我真的需要内容提供商吗?甚至官方指南也说:

You don't need to develop your own provider if you don't intend to share your data with other applications. However, you do need your own provider to provide custom search suggestions in your own application. You also need your own provider if you want to copy and paste complex data or files from your application to other applications.

而且我认为我不需要任何关于此的内容 + 因此它会产生不必要的复杂性。 所以 .. 我应该怎么办,破解我自己的 CursorLoader 以仅与我的数据库一起工作(CursorLoader usage without ContentProvider),老实说我真的不喜欢,或者我应该接受它并符合成为提供者?

谢谢!

最佳答案

您可以编写一个Loader(或使用CommonsWareSQLiteCursorLoader)来直接查询您的SQLiteDatabase。该文档是正确的,因为如果您的应用程序只需要简单地访问本地数据(而不是与不同的进程/应用程序共享该数据),那么您实际上并不需要 ContentProvider

也就是说,ContentProvider 确实提供了一些好处。例如,您需要一个来实现 SyncAdapter 或使用 SearchManager 的搜索接口(interface)。我尝试将这些合并到我的应用程序中,因此我发现自己一直在实现 ContentProviderContentResolver 还提供了一种在发生更改时向基础数据源提供全局通知的简单方法。例如,CursorLoader 将在其 Cursor 上注册一个 ContentObserver,当您在给定的 Uri 上调用 ContentResolver#notifyChange(Uri uri, ContentObserver observer)。如果您要直接从 SQLiteDatabase 加载数据,则设置它需要更多的工作。

关于android - 不会共享的应用程序是否需要内容提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970624/

相关文章:

android - 当应用程序在后台运行时,Android 能否在不终止整个进程的情况下终止 Activity ?

android - 如何使用 Xamarin.Android 从最终 APK 文件中删除未使用的语言?

android - 如果手机( native )中存在多条未读短信,如何通知从 native (手机)读取了哪些短信?

android - Fragments、ContentProviders 和方向变化的游标

android - 如果没有 @Inject 构造函数或 dagger kotlin 中的 @Provides-annotated 方法,则无法提供

android - ArrayAdapter - 我做错了什么?

android - 如何在android中的两个或多个应用程序之间安全地共享数据?

android - ContentProvider 的可变数据库名称

Android SimpleCursorAdapter 到 CursorAdapter

java - NPE : CursorTreeAdapter$MyCursorHelper. changeCursor(Cursor, boolean)' 在空对象引用上