静态数据库
来源:互联网 发布:数控编程软件怎么下载 编辑:程序博客网 时间:2024/05/28 23:22
一个Android应用给用户的第一印象非常重要,除了要有好的创意和美观的界面,性能也是很关键的部分,本文讨论的就是第一次启动的速度问题。 Android应用的启动过程不能让用户等待太长时间,个人觉得最好控制在3秒之内。一般来说,内容的初始化是影响Android应用第一次启动速度的主要因素之一,尤其是创建数据库并插入一定数量的初始记录,对于这种问题,最好的办法莫过于在首次初始化时导入静态数据库。
在Android中导入静态数据库很简单,首先将准备好的静态数据库文件放到Android工程的res目录中的raw子目录下面,如果没有这个子目录的话就手动创建该目录,然后在应用的初始化阶段通过类似下面的代码将数据库文件拷贝到特定的目录下面,假设Android应用的包名是com.test,那么大部分情况下该应用默认的数据库文件位于/data/data/com.test/databases目录下面。
String dbDirPath = "/data/data/com.test/databases";
File dbDir = new File(dbDirPath);
if(!dbDir.exists()) // 如果不存在该目录则创建
dbDir.mkdir();
// 打开静态数据库文件的输入流
InputStream is = context.getResources().openRawResource(R.raw.data);
// 打开目标数据库文件的输出流
FileOutputStream os = new FileOutputStream(dbDirPath+"/data.db");
byte[] buffer = new byte[1024];
int count = 0;
// 将静态数据库文件拷贝到目的地
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
}
is.close();
os.close();
以最近完成的一个应用来看,采用导入静态数据库的方式后,第一次启动时间从将近4秒变成了1秒,效果还是很明显的。
不过,这种方式是假定所有Android设备的应用安装目录是相同的,而且数据库文件的目录都是/data/data/包名/databases,但是Android的文档中并没有明确规定所有设备具有此种目录结构,所以将静态数据库文件拷贝到一个事先定死的目录的做法还是有一定危险性的。更好的做法是使用Android系统提供的API去解决这个问题,总之,我们要避免的就是使用固定目录,下面是更好的拷贝过程:
// 打开静态数据库文件的输入流
InputStream is = context.getResources().openRawResource(R.raw.data);
// 通过Context类来打开目标数据库文件的输出流,这样可以避免将路径写死。
FileOutputStream os = context.openFileInput("data.db");
byte[] buffer = new byte[1024];
int count = 0;
// 将静态数据库文件拷贝到目的地
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
}
is.close();
os.close();
最终的数据库文件将位于/data/data/com.data/files目录下,需要注意的是,使用Context类的openOrCreateDatabase方法或者SQLiteOpenHelper工具类时,不能再传递数据库的名称作为参数,而是要把数据库文件的全路经传递给它们。
- 静态数据库
- 数据库 静态表
- 静态页面获取数据库数据
- php数据库与静态页的关系
- 静态属性和方法访问数据库类
- 静态方式破解WX本地数据库
- django连接数据库和静态资源配置
- 《数据库系统概念》14-静态散列
- Oracle 9i新特性——静态数据库
- ASP生成静态全过程研究,从数据库到页面生成
- Oracle数据库的动态注册和静态注册
- web服务器+数据库服务器+静态页服务器分离
- freemarker+jdbc+mysql读取数据库生成静态页面
- php 利用数据库教程信息生成静态页面实例代码
- 服务器数据库系列 - Nginx 静态文件缓存时间设置
- 数据库端ajax与静态化页面架构设计
- qt静态编译时无法加载数据库插件
- 生成静态页的 后台读取数据库,前台选中
- 约瑟夫问题求解
- 黑马程序员----JAVA----IO小结(1)
- 大数模版
- 核信周公解梦源码-PHP版
- JBPM说明
- 静态数据库
- 黑马程序员----JAVA----IO小结(2)
- MVC框架(1)
- 使用内嵌jetty启动solr
- 操丛数据
- Android--SQLite(增,删,改,查)操作
- Hadoop Pig学习笔记(一) 各种SQL在PIG中实现
- MoSQL:简化MongoDB与PostgreSQL之间的同步
- vim使用小技巧—字符搜索