多个设备的相同DB

时间:2012-08-01 13:32:37

标签: android android-sqlite

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

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

问题是:根据设备或Android API版本,数据库可能会有所不同吗?如果我复制这个数据库,每个设备都会有完整的副本,所以这是一个问题,存在数据库与X设备/ API版本不兼容的风险(我也在谈论关于一些喜欢做一些改变的建设者?)

感谢您的时间。

5 个答案:

答案 0 :(得分:2)

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

因此,如果在您的数据库中存在外键约束,他们将无法使用API​​级别<8的Android。

我不认为还有其他差异。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我有一个想法,可以更快地处理,但以下标准应符合您的要求

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

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

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

我认为它可能对你有所帮助。

答案 4 :(得分:0)

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

我建议你,使用服务为你的任务在后台为你做的工作,如果我是你,我会使用cvs而不是JSON,因为JSON(据我所知)工作较慢当你有大量数据时。

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

<强>摘要 - 使用cvs而不是json - 使用服务来填充数据库 - 如果您使用不同的流程服务,请在应用程序中检查是否所有行都已就位(从表中选择count(*)并检查它是否与db中的预期行数相匹配)。