我需要在首次启动时让我的应用更快。目前我使用我解析的 JSON 文件,并在首次启动时在数据库中插入数据。问题是这可能需要很长时间(三星spica:/),因为有大量的数据。
我在想另一种方法。我会有2个应用程序,一个生成第一个 sqlite db ,我将其复制到我的主应用程序的资源中。因此,我不再需要嵌入我的JSON文件,而是我的数据库。我知道这是可能的,我知道该怎么做。
问题是:根据设备或Android API版本,数据库可能会有所不同吗?如果我复制这个数据库,每个设备都会有完整的副本,所以这是一个问题,存在数据库与X设备/ API版本不兼容的风险(我也在谈论关于一些喜欢做一些改变的建设者?)
感谢您的时间。
答案 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中的预期行数相匹配)。