本地永久性数据存储(Flash Lite 共享对象)
SharedObject
Object
|
+-SharedObject
public dynamic class SharedObject
extends Object
SharedObject 类的 Flash Lite 版本允许 Flash SWF 文件在关闭时将数据保存到设备中,然后在重新播放时从设备加载该数据。Flash Lite 共享对象将一组名称/值对存储到设备中。
注意:名称“SharedObject”是从 Flash SharedObject 类派生的。该类的 Flash 版本允许多个 Flash SWF 文件共享其保存的数据。但是,SharedObject 类的 Flash Lite 版本不支持在不同的 Flash SWF 文件之间共享数据。
在 Flash Lite 中,如果修改了 SWF 文件的原始版本,即使该文件的名称不变,也会将该文件视为不同的版本。这与 Flash Player 不同,在 Flash Player 中,即使修改了 SWF 文件,但只要该文件的 URL 和名称不变,就会将该文件视为同一版本。在 Flash Lite 中,两个版本不同的 SWF 文件不能访问彼此的共享对象。
为维护 Flash 平台的一致性,ActionScript 构造和调用约定同样适用于 Flash Lite 播放器。
下面的示例说明了使用共享对象的可能性:
一个 Flash 应用程序可用作某一服务的用户界面,该用户界面使用户可以搜索二手车清单。该应用程序根据用户所输入的搜索词条和偏好连接到提供二手车清单的服务器。该 Flash 应用程序可以保存用户上次执行的搜索,并在下次播放 SWF 文件时预填写表单。为此,您需要创建一个 SharedObject 实例,该实例在用户每次执行新搜索时存储搜索参数。当 SWF 文件关闭时,播放器将共享对象中的数据保存到设备中。当下次播放 SWF 文件时,Flash Lite 播放器会加载共享对象并用用户上次输入的同一搜索数据预填写搜索表单。
一个 Flash 应用程序可用作某一服务的用户界面,该用户界面使用户可以搜索音乐评论。该应用程序使用户可以存储有关其喜爱的专集的信息。可以将这些信息存储在远程服务 器上,但如果该应用程序无法连接到该服务,这样做就会出现问题。此外,从远程服务检索数据可能速度很慢并可能会妨碍用户体验。共享对象使该应用程序可以将 有关专集的信息存储到设备中,并在需要时快速加载这些信息。
注意:由于移动设备上的空间有限,因此数据不是完全永久性的;在某些情况下,平台可能会从设备上删除最早的数据。
若要创建本地共享对象,请使用以下语法:
var so:shared object = shared object.getLocal("mySharedObject");
在手机上读写数据可能速度很慢。为确保应用程序从设备请求数据时,可立即获得该数据,Flash Lite 2.0 要求您设置一个侦听器。当设备加载完共享对象的数据时,播放器会调用该侦听器。访问 SharedObject 实例(通过对 getLocal() 的调用返回)的方法应等到调用该侦听器之后再尝试执行任何操作。
示例
在下面的示例中,SWF 文件创建一个名为 Prefs 的侦听器函数,然后创建一个共享对象。当数据可用时,播放器将调用 loadCompletePrefs 函数。
function loadCompletePrefs (mySO:SharedObject) {
if (0 == mySO.getSize() )
{
// If the size is 0, we need to initialize the data:
mySO.data.name = "Sigismund";
mySO.data.email = "siggy@macromedia.com";
}
else
{
// Trace all the data in mySO:
trace( "Prefs:" );
for (var idx in mySO.data) {
trace( " " + idx +": " + mySO.data[idx] );
}
}
}
SharedObject.addListener( "Prefs", loadCompletePrefs );
// We can now create the shared object:
var Prefs:SharedObject = SharedObject.getLocal("Prefs");
当播放器向侦听器发出数据可用的通知后,应用程序可以像在 Flash 中使用共享对象一样使用从对 getLocal() 方法的调用返回的共享对象。应用程序可以在播放内容期间添加、修改或删除属性。在卸载内容后,可能会将共享对象写入设备中;但是,要保证将共享对象写入设备中,应用程序必须通过调用 flush() 方法强制执行写入操作。
Flash Lite 共享对象只适用于本地存储的 SWF 文件。在支持网络的浏览器中回放的 SWF 文件不能使用 Flash Lite 共享对象。
每个 SWF 文件的 Flash Lite 共享对象的总存储量受设备的限制,不能超出预定大小。可以通过使用 SharedObject.getMaxSize() 方法来确定此大小。
注意:Flash Lite 2.0 中不支持远程共享对象。
方法摘要
修饰符 | 签名 | 说明 |
---|---|---|
static | addListener(objectName:String, notifyFunction:函数) : Void | 创建一个事件侦听器,当 Flash Lite 播放器从设备加载完共享对象数据时调用该侦听器。 |
| clear() : Void | 清除共享对象中的所有数据并从磁盘中删除共享对象。 |
| 将共享对象写入本地永久性文件。 | |
static | getLocal(name:String) : SharedObject | 返回对本地永久共享对象的引用,该对象只可用于当前客户端。 |
static | getMaxSize() : Number | 返回 SWF 文件在设备上存储移动共享对象时可使用的总字节数。 |
| 获取共享对象的当前大小(以字节为单位)。 | |
static | removeListener(objectName:String) | 删除使用 addListener() 方法添加的任何侦听器。 |
继承自 Object 类的方法
addProperty(Object.addProperty 方法)、hasOwnProperty(Object.hasOwnProperty 方法),isPropertyEnumerable(Object.isPropertyEnumerable 方法)isPrototypeOf(Object.isPrototypeOf 方法),registerClass(Object.registerClass 方法)、toString(Object.toString 方法)unwatch(Object.unwatch 方法)、valueOf(Object.valueOf 方法),watch(Object.watch 方法)
- addListener(SharedObject.addListener 方法)
- clear(SharedObject.clear 方法)
- data(SharedObject.data 属性)
- flush(SharedObject.flush 方法)
- getLocal(SharedObject.getLocal 方法)
- getMaxSize(SharedObject.getMaxSize 方法)
- getSize(SharedObject.getSize 方法)
- onStatus(SharedObject.onStatus 处理函数)
- removeListener(SharedObject.removeListener 方法)