WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程BlackBerryBlackBerry 应用程序开发者指南 第二卷:高级--第8章 存储持久数据

BlackBerry 应用程序开发者指南 第二卷:高级--第8章 存储持久数据
作者:佚名  来源:本站整理  发布时间:2008-3-15 1:42:02

作者:Confach 发表于 2006-04-28 22:28 pm
版权信息:可以任意转载, 转载时请务必以超链接形式标明文章原始出处 和作者信息.
http://www.cnblogs.com/confach/articles/387952.html

8 存储持久数据


持久数据选项

管理持久数据

内存管理以及持久对象

管理客户对象

持久数据选项

BlackBerry设备上,以下面的方式可以存储数据:

  • 使用MIDP记录存储.
  • 使用BlackBerry持久存储模型.

如果你想让你的应用程序可以在多个与Java ME兼容的设备上运行,那么采用MIDP的实现.如果你编写应用程序仅仅为BlackBerry设备,使用BlackBerry持久存储模型,因为它提供了一个更为灵活有效的方式存储数据,

MIDP存储记录

javax.microedition.rms包提供了MIDP记录存储的实现.持久数据存储在RecordStore对象里.一个记录存储最大可以为64KB.

数据的离散单元称为记录.一个记录是一个字节数组,赋给它一个唯一标志数.

创建一个记录存储

调用openRecordStore().指定true来描述当记录存储不存在时应该创建此记录存储.

RecordStore store = RecordStore.openRecordStore("Contacts", true);

:当从BlackBerry设备删除一个应用程序时,所有此应用程序创建的记录存储都会删除.每个在MIDlet(suite)的记录存储都有一个唯一名.MIDlet仅可以访问一个在相同包里的由MIDlet创建的记录存储.

增加一个记录

调用addRecord().

int id = store.addRecord(_data.getBytes(), 0, data.length());

 

获取一个记录

调用getRecord(int, byte[], int).给本方法提供一个记录ID,字节数组,以及一个偏移作为参数.

byte[] data = new byte[store.getRecordSize(id)];

store.getRecord(id, data, 0);

String dataString = new String(data);

 

获取所有记录

打开存储,然后获取其迭代.

RecordStore store = RecordStore.openRecordStore("Contacts", false);

RecordEnumeration e = store.enumerateRecords(null, null, false);

enumerateRecords(RecordFilter filter, RecordComparator comparator, Boolean keepUpdated) 方法有如下参数:

参数

描述

filter

此参数指定一个RecordFilter对象获取记录存储结果的子集(如果为null,将返回所有记录存储).

comparator

此参数指定一个RecordComparator对象决定返回记录所在的顺序位置(如果为null.将返回无序的记录).

keepUpdated

此参数决定对于记录存储,迭代保持当前的改变.

BlackBerry持久存储

MIDP中的记录存储(RecordStore)BlackBerry持久模型(PersistentStore)2处主要的区别.

特性

描述

数据存储

MIDP记录仅以字节数组存储数据.相比之下,BlackBerry API允许你在持久存储中保存任何对象.这样,查询存储数据就会比记录模型更快一些.为了存储一个自定义的对象类型,自定义类型的类必须要实现Persistable接口.

数据共享

MIDP,每个RecordStore属于单个MIDlet,并且MIDlet也只能访问由相同包的MIDlet创建的记录存储.尽管如此,BlackBerry持久模型中,数据可以在应用程序之间共享,在创建数据的离散应用程序中共享.代码签名指定只有被认证的应用程序才可以访问这些数据.

:BlackBerry持久性API在手持设备软件3.6或后期版本可用.对于早期的版本,你必须使用MIDP记录存储.

保留存储空间

BlackBerry的存储空间是有限的.你应该小心设计你的程序,将需要存储持久数据的闪存数量最小化.

在一般的BlackBerry,对于一个标准的BlackBerry应用程序,不需要的存储空间必须在所有应用程序之间共享,用来存储用户数据,包含日历约会,联系人,以及消息.

如果BlackBerry设备在一个小内存情况下操作,它有可能完成下面的动作释放内存空间:

  • BlackBerry上删除以前的消息.
  •  BlackBerry 设备上删除超过一个星期的日历约会(如果启动了无线日历同步).

如果因低内存而BlackBerry设备删除了消息或者日历约会,那么在桌面消息程不会删除数据.为获的更多信息,参看96页的内存管理以及持久对象”.

   :用户点击设备选项的Status可以查看当前可用的数据空间.

 

备份与恢复

net.rim.device.api.synchronization包中,同步(synchronization)API允许你备份以及恢复BlackBerry设备上的持久数据.为获取更多信息,参看104页的增加支持备份持久数据”.

 

安全

缺省的,BlackBerry上由RIM数字签名的应用程序可以访问持久存储上的数据,联系RIM获取关于控制数据访问的信息.

 

管理工具

BES 3.5 Microsoft® Exchange SP2 BES 2.2 M® Lotus® Domino®,系统管理员可以使用IT策略控制第三方应用程序访问持久存储.

管理员可以设置应用程序控制项ALLOW_USE_PERSISTENT_STORETRUEFALSE.缺省的,第三方应用程序可以使用持久存储(ALLOW_USE_PERSISTENT_STORETRUE)

:这个策略对MIDP记录存储没有影响.

数据完整性

为了维护持久存储数据的完整性,如果在提交时发生一个错误,不会更新局部.

:因低内存VM完成一个紧要的垃圾回收时,数据完整性会折中.在这样的情况下,BlackBerry设备提交时,部分完成的事务会提交.在正常垃圾回收下未提交的事务不会提交.

管理持久数据

持久数据类型

如果一个自定义数据类型类实现了Persistable类接口,那么此数据类型可以持久保存.小面原生数据类型也可以持久存储.

  • java.lang.Boolean
  • java.lang.Byte
  • java.lang.Character
  • java.lang.Integer
  •  java.lang.Long
  • java.lang.Object
  • java.lang.Short
  • java.lang.String
  • java.util.Vector
  • java.util.Hashtable

:当你持久化一个对象时,此对象引用的任何对象也可以持久化.

创建一个持久化数据库

每个应用程序一般可以创建单个PersistentObject.此对象是应用程序的持久化数据以及索引的根数据库.应用程序将保存数据到此PersistentObject.

:使用一个静态的构造子,这样PersistentObject只创建一次,即此类的一个对象第一次创建时.每次一个进程开始时,它包含的静态块再一次运行.

一个唯一的long键标志了每个PersistentObject.此键一般为一个全权包名的哈希

 :当一个应用程序从BlackBerry删除时,所有此应用程序创建的持久化对象也将删除.

[1] [2] [3] [4] [5]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码