Android 针对DB活动体系结构和/或上下文泄漏的ContentProvider解决方案是否存在漏洞

Android 针对DB活动体系结构和/或上下文泄漏的ContentProvider解决方案是否存在漏洞,android,multithreading,design-patterns,android-contentprovider,android-sqlite,Android,Multithreading,Design Patterns,Android Contentprovider,Android Sqlite,在使用大型数据库时,在我的例子中,大约有20个数据源定义(每个DS有2-5个表,存储在同一个SQLiteDatabase中),很少出现问题 例如: 线程同步(,) 子类的单例(,)模式 在和/或数据源的单例上可能 或者,如果使用应用程序的上下文(Context.getApplicationContext()),内存堆会很大 尽管我知道,在不向其他服务/应用程序公开应用程序的数据时,使用ContentProviders是不必要的(,),但我认为它解决了上述大多数问题,并允许/推送实现有趣的

在使用大型数据库时,在我的例子中,大约有20个数据源定义(每个DS有2-5个表,存储在同一个SQLiteDatabase中),很少出现问题

例如:

  • 线程同步(,)
  • 子类的单例(,)模式
  • 在和/或数据源的单例上可能
    • 或者,如果使用应用程序的上下文(
      Context.getApplicationContext()
      ),内存堆会很大
尽管我知道,在不向其他服务/应用程序公开应用程序的数据时,使用ContentProviders是不必要的(,),但我认为它解决了上述大多数问题,并允许/推送实现有趣的功能,例如或使用来访问数据


这仅仅是对ContentProvider模式的误解,还是对可能出现的(不仅仅是提到的)问题的解决方案真的很复杂?

鉴于最近对startmanagingcursor的反对,以及您可以从文档和几本书(包括reto meyer的一本)中读到的内容,contentprovider似乎是解决一系列问题的建议方法,包括您列出的问题

即使声明,如果您不打算与其他应用程序共享数据,您不需要开发自己的提供商,基于加载程序的方法显然得到了大力宣传,使您不再担心刚才提到的问题,更不用说,只要您的数据发生更改,就可以自动通知加载程序

另外请注意,您可以向外部世界隐藏您的内容提供商

android:exported="false"
在任何情况下都不应该担心线程同步,因为sqllite调用是线程安全的(根据我的记忆)


我也同意,编写内容提供商包括很多样板代码,这就是为什么我编写了一个脚本来为我编写这些代码:-)。如果你感兴趣,你可以检查它,但是也要考虑在谷歌上寻找“内容提供者生成器”会返回一些像样的,如果不是更好的替代品。

内容提供者实现可以是大量的样板代码来编写,这就是为什么我开发了机械化DB。如果您计划实现一个sqlite支持的内容提供者,您的生活可能会更轻松