结合了ContentProviders

时间:2016-09-23 03:48:41

标签: android sqlite android-contentprovider

我正在尝试实现隔离和模块化,因此我将数据存储在相互通信的不同应用中。

我有一个名为ContentProvider的公共“foos”的自定义FooContentProvider

第二个应用中的第二个ContentProvider应根据匹配的“foo_id”为某些foos保留一些“条形”。

第三个应用现在应该能够显示ListView所有的foos,如果可用的话还有条形码。

现在我被困在如何组织代码上。我可以让我的FooBarContentProvider列出带有关联栏的foos,还是我应该只在FooBar ListView应用程序中加入这些?如何在不复制数据或必须将连接的表存储在内存中的情况下仍然利用所涉及的数据库?

选项#1:两个ContentProvider使用MatrixCursor

加入CursorJoiner

我找到了CursorJoiner我可以用来填充MatrixCursor我可能用于我的FooBarContentProvider或者可选地只用在FooBar ListView应用程序中来支持ListView但是我预计会有相当大的延迟启动和内存问题,如果foos和bars进入数百或数千(高级用户将实现),当然,如果数据发生变化并且新的foos到达,它将无法正常工作。

选项#2:仅使用FooContentProvider并提供预编译BarContentProvider

中的HashMap<String, Bar>

如果FooBar ListView由FooContentProvider支持,它可以填充Map的“条形”数据。这样,我可以减少在显示第一个数据之前解析ContentProvider之前只需要解析其中一个数据。在我的情况下,条形图更小且严格小于foos,并且foos的更改是从服务驱动的,而条形图主要是用户输入,因此这可能是notifyChange()工作的更好选项。 / p>

选项#3:让代理ContentProvider将数据收集到合并数据库

代理ContentProvider可以监听其他两个并提供我需要的数据库,但这会浪费大量存储空间,因为FooContentProvider很容易进入数百MB。

选项#4 ????

#4有好的选择吗?如何以ListView支持ContentProvider以一种方式运行,特别是在启动时,数据更改会快速传播到ListView

0 个答案:

没有答案