SharedObject在Flash Lite中应该注意
Writing by zikey on Monday, 5 of November , 2007 at 3:40 pm
在Flash Lite1.1之后,开始支持SharedObject,这极大的方便了我们在开发过程中对数据的存储问题(不过现在支持的手机不是特别多,这个是最郁闷的)。SharedObject在Flash Lite中可以实现和PC上面一样的功能,不过却也有很多区别。最近在做一个游戏的时候就已经领教到了。
因为以前在PC上面用过SharedObject,所以自己就想当然的按照PC上面的方法来实现,不过郁闷的是,调试了半天都没有得到期望的结果,但是一旦发布成PC版本就完全可用,真是郁闷死我了。后来看了一下帮助文档才知道,原来在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 中不支持远程共享对象。
admin#flashas.net (#为@) 联系QQ:
:40777822
浙ICP备06033001号