3

我需要在第一次启动时让我的应用程序更快。目前,我使用解析的JSON文件,并在首次启动时将数据插入数据库。问题是这可能需要很长时间(Samsung spica :/),因为数据量很大。

我正在考虑另一种方法来做到这一点。我将有 2 个应用程序,一个生成第一个sqlite db,我将其复制到我的主应用程序的资源中。因此,我不再需要嵌入我的 JSON 文件,而是嵌入我的数据库。我知道这是可能的,而且我知道该怎么做。

问题是:数据库可以根据设备或 android API 版本而有所不同吗?如果我复制这个数据库,每个设备都会有精确的副本,所以这是一个问题,数据库是否存在与 X 设备/API 版本不兼容的风险(我也在谈论一些喜欢制作的构造函数一些变化) ?

感谢您的时间。

4

5 回答 5

2

您可能想要使用“较新”版本的 SQLite 中引入的一些功能。例如,在 SQLite 版本 3.6.19(API 级别 8,Froyo)中引入了外键支持,但所有版本的 Android 都支持触发器 afaik。

因此,如果您的数据库中有外键约束,它们将无法在 API 级别 <8 的 Android 上运行。

我认为没有其他区别。

于 2012-08-01T13:41:33.493 回答
1

我认为如果您使用 sqlite 3.0(所有设备中使用的最低版本)不会有任何重大区别。但是,如果您使用 SQLite 版本 3.6.19 的功能(例如外键等),它们将无法在运行版本 3.0 的设备中运行。

于 2012-08-13T10:43:33.570 回答
0

如果数据没有改变,您可以使用包含所有数据的 xml 文件(或 json)。在第一次启动时,使用 AsyncTask 填充您的 sqlite 数据库。

于 2012-08-01T14:56:26.497 回答
0

我有一个想法来加快处理速度,但以下标准应该满足您的要求

1)你的数据库是静态的吗?

2)或者它是动态的,修改你的数据库来修改行。

如果您的数据库是动态的,请首先使用应用程序预加载数据库,并在服务器发生更改时更新您的数据库。

我想它可能会帮助你。

于 2012-08-02T05:29:28.583 回答
0

我有一个项目,它执行以下操作: - 在启动时(或按下刷新按钮),它会检查 wcf 服务中的新数据(4 个表,大约 1600-2000 个表条目总和)。- 该服务为每个表生成 cvs 文件并压缩数据(gzip) - android 应用程序下载压缩文件并提取其中的数据 - 之后,它处理 csv 文件 整个过程大约需要 2 秒(包括下载)在较旧的设备(1 核,1GHz)上。

我建议你,为你的任务使用服务在后台为你完成工作,如果我是你,我会使用 cvs 而不是 JSON,因为 JSON(据我所知)在你使用时会更慢有很多数据。

在服务中运行信息处理和插入数据库有一些重要的优势: - 如果用户按下主页键,服务可以在后台继续工作 - 您仍然可以向用户显示进度对话框以让他/她知道您的应用程序正在运行 - android 可以在不同的进程上运行服务,所以如果您的主应用程序完全被杀死(由用户或系统在需要其他内存时),所以这样你仍然可以做你的数据库的东西。- 在不同进程中运行的缺点是 - 那是另一个虚拟机,因此它消耗更多内存 - 可能会导致数据库访问出现问题,但由于您只会在第一次运行时使用它来填充数据库,所以没关系您可以阅读更多相关信息这里(安卓:进程):http://developer.android.com/guide/topics/manifest/service-element.html#proc

总结 - 使用 cvs 而不是 json - 使用服务来填充数据库 - 如果您使用不同的流程服务(从表中选择 count(*) 并检查它是否与db 中的预期行数)。

于 2012-08-10T09:32:59.177 回答