2010-10-24 69 views
3

我正在开发一个将带有大量数据的Android应用程序。我期望只分发SQLite数据库,但从研究中可以清楚地看到,数据库可以包含在内,但是必须从原始数据复制到数据,如果只有很少的MB数据,就会无谓地占用空间。对于我的应用程序,数据是全部文本/数字/日期,并且在关系数据库中通常会占用四个表格。非常简单,但有两份它似乎是浪费。配置大量数据的应用程序的最佳方法

我看到的选项:

  1. 容忍被复制的数据(它的痛苦,我)
  2. 在安装应用程序下载通过HTTP的数据(我会再有负载一个潜在的挑战),可能是Google App Engine。

其他解决方案值得考虑?

+0

如果你的数据只是文本,从HTTP加载它不应该是任何Web服务器上的问题。 – Falmarri 2010-10-24 22:14:41

+0

我很舒适地编写一个应用程序来提供它,但该应用程序将是广告支持和免费的,所以我热衷于保持最低成本,如果每次安装需要说5MB的下载,然后1000安装已经有我涵盖5GB的数据。不是特别昂贵,但它增加了。我还必须考虑更新 - 无法在更新时下载所有数据,因此需要一种方法来执行增量更新。 – 2010-10-24 22:19:03

+0

你能告诉我们数据/应用程序的用途吗?我问,因为,部分我很好奇,部分我想知道,如果根据用户行为(或从您自己以外的公共来源下载和重构)无法根据需要下载数据。 – 2010-10-24 23:06:15

回答

2

我遇到了同样的情况:我正在编写一个应用程序,它必须在本地访问一个主要包含文本并且重量超过20MB(7MB zip压缩)的数据库。

我认为这种问题的最佳解决方案是在应用程序的第一次执行时下载压缩编译数据库。 此解决方案的优点:

  • APK保持点亮。这是一个好事,因为:
    • 非常大的APK可能阻碍一些潜在用户
    • 测试速度更快,因为上传7MB + APK到AVD(像我一样在初期)是相当缓慢的。


  • 没有你的数据的重复(如果你照顾删除ZIP压缩文件的解压它


  • 你之后不要填满你的用户手机interna l记忆。事实上,你的应用程序应该直接将数据库下载到SD卡。在res/raw文件夹中包含大文件会给运行Android < 2.2的所有用户造成很大的麻烦,因为他们无法将应用程序移动到SD CARD(由于这一点,我看到了一些负面的用户评论在内部存储器上使用几个MB的应用程序)。

最后一件事:我不建议包括CSV或XML,并在首次运行时从中填充数据库。原因是这样会很慢,这种处理不应该由每个客户完成。

+0

塞巴斯蒂安,谢谢你分享你的经验。我倾向于同意,从应用程序中排除数据并在第一次运行时下载数据是有意义的。这并不理想,但是我可以看出,这似乎是最好的折中方案。 – 2010-10-25 12:22:33

1

不是一个正确的答案,但关于选项1的主题:记住一个apk是一个zip文件,因此一个包含相同单词的文本文件会变得更小。

+0

是的,很好,值得考虑以不同格式传递数据,只是为了尽量缩小数据。 – 2010-10-24 21:23:20

2

如果您将数据打包到res/raw文件夹中,那么它确实会被复制,并且一旦手机完成第一次运行后就不能删除unfortunatley。

您可以尝试哪一个尺寸较小 - 将数据打包为csv或xml文件,或者作为res/raw文件夹中的预编译数据库,并且如果可接受的话最好。 如果使用csv或xml文件选项,则可以在第一次运行时运行解析器并将数据处理为数据库。

我最近才发现的东西,但res/raw文件夹只能处理1mb左右的文件,这是我遇到的一个解决方案,我打包一个大型数据库并在第一次运行时遇到它,在应用程序中的数据:

Database Populating Solution

这里是从Android的BlogSpot的替代,第三个下来,你正在寻找,也许正是为:

的下载活动在 运行开始ning你的应用程序和 确保一组文件有 已从网络服务器下载到 手机的SD卡。 Downloader是 对于需要更多 本地数据的应用程序非常有用,它可以放入.apk 文件中。

Downloader Blogspot

可能适应这个例子 - 从服务器下载数据库文件,然后将其移动到你的数据库文件夹中。

+0

我没有意识到原始/资源文件有一个1MB的限制,这是非常有用和重要的了解,谢谢。看起来,尝试将数据导入APK中有很多缺点。 – 2010-10-25 12:21:35

相关问题