Chinaunix首页 | 论坛 | 博客
  • 博客访问: 703083
  • 博文数量: 95
  • 博客积分: 1773
  • 博客等级: 上尉
  • 技术积分: 1653
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-17 23:28
文章分类
文章存档

2018年(2)

2017年(10)

2016年(7)

2015年(48)

2014年(2)

2013年(2)

2012年(2)

2011年(7)

2010年(7)

2009年(3)

2008年(1)

2007年(4)

分类: 嵌入式

2012-04-13 16:22:48

    AIR程序大多需要在本地缓存一些数据,这些数据是否能正确存储关系到AIR是否真正可用,本文就介绍在基于AIR的Android开发中数据存储需要特殊处理。
     首先,需要明白几个基本的路径关系:
  • File.applicationStorageDirectory — 每个已安装的 AIR 应用程序独有的存储目录
  • File.applicationDirectory — 安装应用程序的只读目录(其中包括所有已安装的资源)
  • File.desktopDirectory — 用户的桌面目录
  • File.documentsDirectory — 用户的文档目录
  • File.userDirectory — 用户目录

    这些目录在不同的系统(pc/android/mac)中都是不尽相同的,无论你的程序是在那种环境中,你都必须要正确的构造合适的数据存储文件URI,才能保证数据文件可用。

    首先我们需要关注 File.applicationDirectory,因为这个目录其实是反映你打包时的状态,我们知道AIR程序的打包主要是由这样一些部分构成的(除了一系列标准的描述元数据外):

   1. 一个swf主程序文件

   2. 系列swf主程序以外的各类资源(可以是其他包括swf在内支持可用的任何数据文件)

    所以我们要在主程序中能够正确的访问到相应资源,就可以利用

File.applicationDirectory.resolvePath("资源相对于打包根目录的URI") 这样的形式来构造资源的真实URI,然后才去访问。注意这里采用的是标准方法resolvePath,它可以自行处理不同环境下路径分隔符不同的问题。至此对外部资源的访问是可行的了。

    对于数据的存储(比如缓存一系列状态/或者联网程序下载一些元数据进入数据库存储)却不能采用File.applicationDirectory.resolvePath("存储资源URI"),这是因为File.applicationDirectory对AIR程序来说是不能保证可写的,必须要避免这样的使用,这时应该用File.applicationStorageDirectory.resolvePath("存储资源URI")来构造可写的资源存储实体文件URI,去进行写入操作。不过需要说明的是这个目录不建议进行大数据量的写入,如果是大数据量的写入建议以File.desktopDirectory 或者 File.documentsDirectory 或者File.userDirectory为基础连接构造文件存储URI。

    此外一个技巧是对于复杂文件结构的二进制文件,例如数据库文件(有一定的数据结构),可能需要采用如下机制来建立可写的文档URI:

1. 在资源打包时打包一个拥有结构的空数据库文件;

2. 在首次运行时把File.applicationDirectory.resolvePath("空数据库文件相对URI")复制一个到File.applicationStorageDirectory.resolvePath("数据存储资源URI")

3. 以后的读写都是对File.applicationStorageDirectory.resolvePath("数据存储资源URI")进行了[严格来说是先检查是否有File.applicationStorageDirectory.resolvePath("数据存储资源URI"),如果没有就先执行2步骤]


阅读(4908) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~