活动窗口的数据共享方法、装置、设备及存储介质与流程

文档序号:16692808发布日期:2019-01-22 19:05阅读:161来源:国知局
活动窗口的数据共享方法、装置、设备及存储介质与流程

本发明实施例涉及计算机技术,尤其涉及一种活动窗口的数据共享方法、装置、设备及存储介质。



背景技术:

在android系统中,活动窗口被称为activity。activity是一个负责与用户交互的组件,一个activity可提供一个屏幕(可以理解为屏幕界面,而非实体的显示屏幕),以显示一些控件,监听并处理用户的事件等。

为了节省系统内存,并提高同一个activity中的数据处理效率,目前通常是将活动窗口activity作用域内的数据存储在静态内存中,以实现activity作用域内的数据共享。

然而,一个android应用程序由多个彼此松散联系的activity组成,且一个activity可启动另一个activity。那么,采用上述数据共享方式,在activity页面切换时,如果静态内存中缓存的切换前activity页面对应的数据不能及时被清除(即脏数据),将会导致切换后activity页面共享切换前activity页面的脏数据,进而导致切换后activity页面上显示切换前activity页面的脏数据,如此便对切换后activity页面造成影响。



技术实现要素:

本发明实施例提供一种活动窗口的数据共享方法、装置、设备及存储介质,以实现更加精确且快速地进行android系统中活动窗口页面作用域内的数据共享,且能够有效避免各个活动窗口页面之间共享数据的相互影响。

第一方面,本发明实施例提供了一种活动窗口的数据共享方法,包括:

依据待共享对象确定目标共享对象,所述目标共享对象的数据结构为键值对结构,且所述目标共享对象的目标值的数据类型为祖先类object类型;

以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与所述目标活动窗口对象对应的目标数据缓存对象,其中,所述目标映射关系对象用于存储活动窗口对象与数据缓存对象之间的一一对应关系;

调用所述目标数据缓存对象中的数据存储函数,将所述目标共享对象的目标键和所述目标值对应存储至所述目标数据缓存对象中的目标数据对象。

第二方面,本发明实施例还提供了一种活动窗口的数据共享装置,该装置包括:

目标共享对象确定模块,用于依据待共享对象确定目标共享对象,所述目标共享对象的数据结构为键值对结构,且所述目标共享对象的目标值的数据类型为祖先类object类型;

目标数据缓存对象获取模块,用于以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与所述目标活动窗口对象对应的目标数据缓存对象,其中,所述目标映射关系对象用于存储活动窗口对象与数据缓存对象之间的一一对应关系;

目标共享对象存储模块,用于调用所述目标数据缓存对象中的数据存储函数,将所述目标共享对象的目标键和所述目标值对应存储至所述目标数据缓存对象中的目标数据对象。

第三方面,本发明实施例还提供了一种设备,该设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的活动窗口的数据共享方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的活动窗口的数据共享方法。

本发明实施例通过预先为每个活动窗口对象设置一个独立的数据缓存对象,以存储对应活动窗口对象作用域内的共享数据,避免了在同一静态内存中存储多个活动窗口对象的共享数据,为各个活动窗口对象进行独立的数据共享提供数据存储基础。通过预先建立每个活动窗口对象与数据缓存对象之间的映射关系,并将该映射关系存储至目标映射关系对象中,以映射关系对象的方式,维护活动窗口对象与其对应的数据缓存对象之间的关联性,以使得数据缓存对象的生命周期与对应的活动窗口对象的生命周期一致,为各个活动窗口对象进行独立的数据共享提供数据清除基础。通过将待共享对象确定为包含数据类型为祖先类object类型的目标值的目标共享对象,使得数据缓存对象可以存储目标活动窗口中任意类型的共享对象,提高数据缓存对象的兼容性及数据存储效率。通过调用目标数据缓存对象中的数据存储函数,将待共享数据存储至目标数据缓存对象中的目标数据对象中。实现了以更加精确的方式进行android系统中活动窗口页面作用域内批量数据的共享,使得在activity页面切换时,切换后活动窗口页面对应的共享数据独立于切换前活动窗口页面对应的共享数据,从而有效避免了各个活动窗口页面之间共享数据的相互影响。

附图说明

图1是本发明实施例一中的一种活动窗口的数据共享方法的流程图;

图2是本发明实施例二中的一种活动窗口的数据共享方法的流程图;

图3是本发明实施例三中的一种活动窗口的数据共享方法的流程图;

图4是本发明实施例四中的一种活动窗口的数据共享装置的结构示意图;

图5是本发明实施例五中的一种设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

本实施例提供的活动窗口的数据共享方法,可适用于将每个活动窗口页面作用域内的数据进行全局性、独立性和批量化存储的情况,尤其可以用于在android应用程序中独立存储每个活动窗口页面数据的场景中。该方法可以由活动窗口的数据共享装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有android应用程序的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图1,本实施例的方法包括:

s110、依据待共享对象确定目标共享对象。

其中,共享对象是指存储共享数据的对象,那么待共享对象则是指存储待共享数据的对象,该待共享数据是指目标活动窗口对象作用域内任一组件对象的数据。待共享对象需要在目标活动窗口对象作用域内共享,以便同一作用域内其他组件对象可以获取。这里目标活动窗口对象是指目标活动窗口对应的活动窗口对象。活动窗口对象是指一个活动窗口activity在初始化时构建的相应对象。

目标共享对象是指符合数据共享规则的共享对象。数据共享规则是预先设定的共享规则,例如可以是共享对象的数据类型、数据结构和数据大小中的至少一个,本实施例中以数据类型为例进行说明。示例性地,目标共享对象的数据结构为键值对结构,且目标共享对象的目标值的数据类型为祖先类object类型。其中,键值对key-value结构是一种以键信息key和值信息value一一对应存储的数据结构。键信息是一个字符串类型的对象标识,其可以唯一区分一个对象。值信息是指存储数据内容本身的对象。本实施例中将目标共享对象设置为key-value的键值对数据结构,具体则是目标数据对象包含字符串string类型的键信息(即目标键)和祖先类object类型的值信息(即目标值)。

具体地,一个目标活动窗口对象activity中包含多个组件对象,每个组件对象所用到的数据都可以作为待共享对象。这种情况下,难以保证所有待共享对象都是一致的数据类型。所以,在获得待共享对象之后,对其进行强制类型转换,以转换为祖先类object类型。例如,待共享对象以java中较为常用的javabean数据结构存储,那么待共享对象便是一个javabean对象,将其转换为object对象。那么该进行类型转换后的待共享对象便可以作为目标共享对象的目标值。为了便于对象的引用及访问,为每个object对象设置键信息,即目标键。上述目标键和目标值便共同构成了目标共享对象。

s120、以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象。

其中,目标上下文对象是指目标活动窗口对象对应的上下文对象。数据缓存类是预先定义的一个可存储活动窗口作用域内数据的类。数据缓存对象是数据缓存类实例化后的对象,其实例化的时机是与其关联的活动窗口被创建的时机,即在生成活动窗口对象时,生成该活动窗口对象对应的数据缓存对象。这样,每个活动窗口对象均对应一个独立的数据缓存对象,用于独立存储对应的活动窗口对象的共享数据,进而避免在同一静态内存中存储多个活动窗口对象的共享数据及共享数据清除不及时而导致脏数据的问题。目标数据缓存对象是与目标活动窗口对象对应的数据缓存对象,其用于存储对应的目标活动窗口对象的共享数据。

对象获取函数是预先定义的,用于获取目标数据缓存对象的函数。示例性地,对象获取函数具有私有权限修饰符和静态类型修饰符。私有权限修饰符private的设置目的是为了保证只有对象获取函数所属的类及其实例化对象才可访问,即数据缓存类和数据缓存对象可访问;静态类型修饰符static的设置目的是可以直接通过类名进行调用,无需通过对象中转的方式进行调用,进而提高了对象获取函数的访问便捷性。例如对象获取函数可以定义为:privatestaticactivitycachegetactivitycache(contextcontext){}。其中,activitycache是数据缓存类的类名,其表征对象获取函数getactivitycache的函数返回值为一个数据缓存类类型的数据缓存对象,对象获取函数的函数输入参数为一个context类型的上下文对象。

目标映射关系对象是指存储映射关系的对象。示例性地,目标映射关系对象用于存储活动窗口对象与数据缓存对象之间的一一对应关系。若目标映射关系对象中未存储android客户端中某个活动窗口对象与数据缓存对象之间的映射关系,则表明该活动窗口对象作用域内的数据未进行存储,从而无法进行共享。示例性地,目标映射关系对象具有私有权限修饰符和静态类型修饰符。私有权限修饰符private的设置是为了保证数据的私密性;静态类型修饰符static的设置目的是使得在多个活动窗口对象被实例化时,有效保证全局内存中有且只有一个目标映射关系对象,便于将每个活动窗口对象与数据缓存对象之间的映射关系均存储在同一个目标映射关系对象中。需要说明的是,android系统中的活动窗口对象activity是一个非常庞大的对象,若直接存储活动窗口对象与数据缓存对象之间的映射关系,则会导致内存压力过大,所以本发明实施例中利用activity对应的上下文对象context来构建活动窗口对象与数据缓存对象之间的映射关系。

具体地,将目标上下文对象context作为对象获取函数getactivitycache的输入参数,通过数据缓存类activitycache调用对象获取函数getactivitycache,以在目标映射关系对象中依据目标上下文对象进行对应的目标数据缓存对象mactivitycache的查找及获取。

s130、调用目标数据缓存对象中的数据存储函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象。

其中,数据存储函数是预先定义的,用于将需要存储的对象存储至目标数据缓存对象中的目标数据对象的函数。例如,数据存储函数定义为:publicvoidsetdata(stringkey,stringvalue)。其中,setdata是数据存储函数的函数名称,数据存储函数setdata具有公有权限修饰符public,以便可以直接调用setdata,并且setdata无返回值。存储数据设定为一个字符串string类型的键信息key和一个字符串string类型的值信息value,与后续的目标数据对象的数据结构相对应,以便于进行数据的存储操作。目标数据对象是预先定义的,用于存储目标共享对象的对象。由于目标共享对象的数据结构为键值对结构,且目标键为字符串类型,目标值为祖先类类型,所以,目标数据对象的数据结构便也是诸如map和set等的键值对数据结构,其键和值的类型也分别为字符串类型和祖先类类型。例如,目标数据对象datamap可以定义为:privatehashmap<string,object>datamap,其具有私有权限修饰符private,以便防止除数据缓存类之外的其他类直接访问datamap,从而可以有效保护datamap的数据信息。

具体地,目标活动窗口中的任一组件对象都可以通过调用目标缓存对象中的数据存储函数,将自身组件对象对应的数据存储至目标数据对象中,以实现数据仅能在目标活动窗口的作用域内进行共享,从而在切换目标活动窗口页面时,切换后的目标活动窗口页面无法共享切换前的活动窗口页面数据,即目标活动窗口页面没有对应的脏数据,进而防止将切换前的活动窗口页面的脏数据显示在目标活动窗口页面上,避免了对目标活动窗口页面造成影响。

示例性地,数据存储函数通过如下步骤实现将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象的功能:判断目标数据缓存对象中的目标数据对象是否为空对象;若是,则调用第二初始化子函数,初始化预先定义的第一数据对象,获得目标数据对象;依据目标共享对象,调用目标数据对象中的数据存储子函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象中。其中,初始数据对象是指未被初始化及赋值的数据对象。数据存储子函数是指数据存储函数中用于进行目标共享对象存储的内部函数。具体实施时,在数据存储函数内部,首先通过datamap==null判断目标数据缓存对象中的目标数据对象datamap是否为空对象null。若是,则表明该目标数据对象的引用指向为空,即还未对其进行初始化和实例化,此时调用对目标数据对象进行初始化的初始化函数(即第二初始化子函数),对预先定义的初始数据对象datamap1进行初始化,例如datamap1=newhashmap<string,object>(),获得目标数据对象datamap。若否,则表明已对datamap进行初始化和实例化,此时可以直接将初始数据对象datamap1确定为目标数据对象datamap。本实施例通过确定目标数据缓存对象中的目标数据对象datamap是否为空对象null,可以增强程序的健壮性,以避免后续操作出现错误。在获取目标数据缓存对象mactivitycache中的目标数据对象datamap后,通过目标数据对象datamap,调用数据存储子函数put,即datamap.put(key,value),将string类型的目标键和object类型的目标值以key和value的形式存储至目标数据对象datamap中。由于目标数据对象datamap定义在数据缓存类中,故上述初始化过程在数据缓存类activitycache的构造函数中实现,从而可以保证一个数据缓存类只对应一个目标数据对象datamap。

本实施例的技术方案,通过预先为每个活动窗口对象设置一个独立的数据缓存对象,以存储对应活动窗口对象作用域内的共享数据,避免了在同一静态内存中存储多个活动窗口对象的共享数据,为各个活动窗口对象进行独立的数据共享提供数据存储基础。通过预先建立每个活动窗口对象与数据缓存对象之间的映射关系,并将该映射关系存储至目标映射关系对象中,以映射关系对象的方式,维护活动窗口对象与其对应的数据缓存对象之间的关联性,以使得数据缓存对象的生命周期与对应的活动窗口对象的生命周期一致,为各个活动窗口对象进行独立的数据共享提供数据清除基础。通过将待共享对象确定为包含数据类型为祖先类object类型的目标值的目标共享对象,使得数据缓存对象可以存储目标活动窗口中任意类型的共享对象,提高数据缓存对象的兼容性及数据存储效率。通过调用目标数据缓存对象中的数据存储函数,将待共享数据存储至目标数据缓存对象中的目标数据对象中。实现了以更加精确的方式进行android系统中活动窗口页面作用域内批量数据的共享,使得在activity页面切换时,切换后活动窗口页面对应的共享数据独立于切换前活动窗口页面对应的共享数据,从而有效避免了各个活动窗口页面之间共享数据的相互影响。

在上述技术方案的基础上,在从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象之前,还包括:在数据缓存类的构造函数中,调用第一初始化子函数,初始化预先定义的第一映射关系对象,获得第二映射关系对象;根据各个活动窗口对象的上下文对象,调用哈希码值获取子函数,获取各个上下文对象的哈希码值;调用第二映射关系对象中的元素添加函数,将各个哈希码值和各个数据缓存对象一一对应地存储至第二映射关系对象,获得目标映射关系对象。

其中,第一映射关系对象是指定义的映射关系对象,其未被初始化及赋值。第二映射关系对象是指初始化之后的映射关系对象。哈希码值获取子函数是对象获取函数中预先定义的,用于获取上下文对象的哈希码值的内部函数。哈希码值可以是根据上下文对象的地址、字符串和/或数据确定的整型结构的数值。由于每个活动窗口对象都对应有一个唯一的上下文对象,而上下文对象均具有唯一的一个哈希码值,从而可以利用一个哈希码值来唯一表示一个活动窗口对象。元素添加函数是用于在第二映射关系对象中添加哈希码与数据缓存对象之间的映射关系的函数。

具体地,通过上述s120的说明可知,本发明实施例的目标映射关系对象是以上下文对象和数据缓存对象来构建的活动窗口对象与数据缓存对象的映射关系,但是存储上下文对象依然需要较大的内存空间,且考虑到对象的直接引用较为复杂,本实施例中进一步利用上下文对象的哈希码值来维护活动窗口对象与数据缓存对象的映射关系。这样可以进一步减少内存占用空间,从而提高运行速率。并且根据哈希码值可以更加准确且快速地确定该活动窗口对象对应的数据缓存对象,进而提高对象获取函数的执行效率。例如映射关系对象可以定义为:privatestatichashmap<integer,activitycache>mproxymaps。其中,映射关系对象mproxymaps是通过hashmap的数据结构进行承载,hashmap是基于哈希表的map接口的实现,以键值对key-value的形式存在。映射关系对象mproxymaps中的键是一个整型对象,用于存放上下文对象context的哈希码值;值是一个数据缓存类activitycache类型的对象,用于存放数据缓存对象。

具体实施时,在从目标映射关系对象中获取目标活动窗口对象对应的目标数据缓存对象之前,需要先获取目标映射关系对象,即将每个活动窗口对象与其对应数据缓存对象之间的映射关系存储至目标映射关系对象中。本实施例可以通过mproxymaps1==null判断映射关系对象mproxymaps是否为空对象(null对象)。若是,则表明该映射关系对象未被初始化,其引用指向为空,是一个第一映射关系对象mproxymaps1,此时调用对映射关系对象进行初始化的初始化函数(即第一初始化子函数),对第一映射关系对象mproxymaps1进行初始化,即mproxymaps2=newhashmap<integer,activitycache>,获得第二映射关系对象mproxymaps2。若否,则说明该映射关系对象已经是第二映射关系对象mproxymaps2。然后,分别以每个活动窗口对象对应的上下文对象为函数输入参数,调用哈希码值获取子函数context.hashcode(),获取每个上下文对象的哈希码值。之后,分别调用元素添加函数mproxymaps2.put(code,activitycache),将每个哈希码值及其对应的数据缓存对象添加至第二映射关系对象mproxymaps2中,获得目标映射关系mproxymaps。需要说明的是,由于映射关系对象定义在数据缓存类中,故上述对映射关系对象进行初始化的过程在数据缓存类activitycache的构造函数中实现。

进一步地,在上述技术方案的基础上,对象获取函数通过如下步骤实现从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象的功能:判断对象获取函数的输入参数是否为空对象;若否,则通过目标上下文对象,调用哈希码值获取子函数,获取目标上下文对象的目标哈希码值;以目标哈希码值为函数输入参数,调用目标映射关系对象中的对象获取子函数,从目标映射关系对象中获取与目标活动窗口对象一一对应的目标数据缓存对象。

具体实施时,对象获取函数内部,首先通过context==null判定对象获取函数的输入参数context是否为空对象null。若否,则认为对象获取函数的输入参数为目标上下文对象context。通过目标上下文对象调用哈希码值获取子函数context.hashcode(),获取目标上下文对象对应的目标哈希码值code。之后,以目标哈希码值code为对象获取子函数的输入参数,通过目标映射关系对象调用对象获取子函数mproxymaps.get(code),从目标映射关系对象中获取目标哈希码值对应的目标数据缓存对象。最后可以通过return将获取到的目标数据缓存对象进行返回处理。若对象获取函数的输入参数context为空对象null,则认为对象获取函数的输入参数错误,从而无法从目标映射关系对象中获取目标数据缓存对象,此时可以直接通过returnnull方式返回。

在上述技术方案的基础上,本发明实施例的活动窗口的数据共享方法还包括:在目标活动窗口销毁时,以目标上下文对象为函数输入参数,调用目标数据缓存对象中的对象释放函数,删除目标映射关系对象中的目标数据缓存对象与目标活动窗口对象之间的映射关系。

其中,对象释放函数是预先定义的,用于释放目标活动窗口作用域内共享数据的函数。例如对象释放函数可以定义为:publicvoidreleaseactivity(contextcontext)。其中,对象释放函数releaseactivity具有公有权限修饰符public,以便可以直接调用releaseactivity,并且releaseactivity无函数返回值。对象释放函数releaseactivity的输入参数为一个context类型的上下文对象。

具体地,当目标活动窗口页面进行切换时,需将目标活动窗口进行销毁,即执行目标活动窗口的生命周期结束函数ondestroy。那么在ondestroy函数作用域内,将目标上下文对象作为函数输入参数,通过调用目标数据缓存对象中的对象释放函数releaseactivity,删除目标映射关系对象中的目标数据缓存对象与目标活动窗口对象之间的映射关系。这样,目标数据缓存对象便被释放,其内存储的目标活动窗口作用域内的共享数据也被相应地释放,达到了及时释放目标活动窗口对应的共享数据的效果。

示例性地,对象释放函数的功能实现步骤包括:判断对象释放函数的输入参数是否为空对象;若否,则通过目标上下文对象,调用哈希码值获取子函数,获取目标上下文对象的目标哈希码值;以目标哈希码值为函数输入参数,调用对象释放子函数,删除目标映射关系对象中的目标数据缓存对象与目标活动窗口对象之间的映射关系。具体地,对象释放函数内部,通过context==null判定对象获取函数的输入参数context是否为空对象null。若否,则认为对象获取函数的输入参数为目标上下文对象context,此时通过目标上下文对象context,调用哈希码值获取子函数context.hashcode(),获取目标哈希码值code。之后,以目标希码值code为输入参数,调用对象释放子函数mproxymaps.remove(code),从目标映射关系对象mproxymaps中删除目标活动窗口对象与目标数据缓存对象之间的映射关系,从而达到及时释放目标活动窗口对应的共享数据的效果。若对象获取函数的输入参数context为空对象null,则认为函数输入参数错误,无需执行释放操作。

实施例二

本实施例在上述实施例一的基础上,增加了目标活动窗口对象的共享数据的读取操作。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图2,本实施例提供的活动窗口的数据共享方法包括:

s210、依据待共享对象确定目标共享对象。

s220、以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象。

s230、调用目标数据缓存对象中的数据存储函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象。

s240、以目标获取对象的对象标识为函数输入参数,调用目标数据缓存对象中的数据读取函数,从目标数据对象中读取与对象标识一一对应的值,作为初始获取对象。

其中,目标获取对象是指需要获取的目标活动窗口的共享对象,其数据类型应为该共享对象的原生类型,例如共享对象存储之前为javabean类型,那么目标获取对象的数据类型便也为javabean类型。对象标识是指目标获取对象的标识,其在键值对数据结构中对应于目标获取对象的键。数据读取函数是预先定义的,用于根据对象标识从目标活动窗口对象的目标数据对象中读取共享对象的函数。例如数据读取函数可以定义为:publicobjectgetdata(stringkey),这里的数据读取函数getdata具有公有权限修饰符public,以便其他类和对象可以直接调用getdata,并且getdata函数可以返回祖先类object类型的对象。初始获取对象是指从目标数据对象中直接获取的共享对象。根据上述实施例的说明可知,目标数据对象datamap中存储的共享对象的值的数据类型为祖先类object类型,故初始获取对象的数据类型便是祖先类object类型。

具体地,将目标获取对象对应的字符串string类型的对象标识作为数据读取函数getdata的函数输入参数key,通过调用数据读取函数getdata,从目标数据对象中获取该对象标识key对应的值,作为初始获取对象。之后执行s250。应当理解的是,如果目标数据对象中未存储目标获取对象对应的共享对象,那么该步骤便无法获取初始获取对象,则无需执行后续步骤。

需要说明的是,目标活动窗口中的任一组件对象均可以通过调用数据读取函数来读取目标数据对象中的共享对象,而无法读取非目标数据对象中的数据,从而可以限制数据只能在目标活动窗口的作用域内进行共享,进一步避免各个活动窗口对象中数据的相互影响。

示例性地,数据读取函数的功能实现步骤包括:判断数据读取函数的输入参数是否为空对象;若否,则以目标获取对象对应的对象标识为函数输入参数,调用数据读取子函数,从目标数据对象中读取待获取数据。具体地,数据读取函数内部,首先通过key==null判断确定数据读取函数的输入参数key是否为空对象null。若否,则认为数据读取函数的输入参数为目标获取对象的对象标识key。此时,以该对象标识为数据读取子函数的输入参数,通过目标数据对象调用数据读取子函数datamap.get(key),从目标数据对象datamap中读取对象标识key对应的值,将其作为初始获取对象。若数据读取函数的输入参数为空对象,则认为数据读取函数的输入参数错误,可以直接通过returnnull方式返回。

s250、依据对象标识,从数据类型集合中获得目标获取对象的目标类class对象。

其中,数据类型集合是预先定义的集合,其用于存储目标活动窗口对象中各个共享对象对应的各个键以及与各个键一一对应的各个类class对象。这里类class对象是指java中一个实例化对象所属的类的class对象,其用于表征该实例化对象的原生数据类型。目标类class对象便是用于表征目标获取对象的原生数据类型的类class对象。

根据实施例一的说明可知,共享对象被存储至目标数据对象之后,其便转换为object类型。但是从目标数据对象中获得该共享对象后,需要将其转换为原生数据类型,才可正确地进行后续的数据应用。因此,本实施例中构建了数据类型集合,以将每个共享对象的原生数据类型进行存储,便于后续类型转换时确定获取的共享对象的原生数据类型。具体实施时,根据s110的说明可知,目标活动窗口对象中的每个共享对象均有一个唯一的键以标识该共享对象,故将每个共享对象的键及其原生数据类型进行一一对应性存储,从而构建数据类型集合。

具体地,以目标获取对象的对象标识为查询关键词,从数据类型集合中查找与对象标识一一对应的类class对象,作为目标获取对象的目标类class对象。

示例性地,若数据类型集合为枚举类型,则数据类型集合通过如下方式预先构建:获取目标活动窗口对象中与各个共享对象一一对应的各个键和各个类名;对于任意一个键,以键作为数据类型集合中的枚举键,并通过与枚举键对应的类名访问类class属性,获得枚举键对应的类class对象,作为数据类型集合中与枚举键对应的枚举值;依据各个枚举键以及与各个枚举键一一对应的各个枚举值,构建数据类型集合。

具体地,如果数据类型集合的数据类型为枚举类型,则说明数据类型集合的容量是预先确定的,其内的数据也是预先直接设定的。那么,为了构建数据类型集合,则预先需要获知目标活动窗口对象中的所有共享对象的各个键以及所有共享对象所属的各个类的类名。之后,对于每个键和该键对应的类名,均执行以下操作:将键作为构建枚举类型的数据类型集合中的一一对应关系中的键(即枚举键)。之后,通过该枚举键对应的类名,访问该枚举键的共享对象的类class属性,作为数据类型集合中与枚举键一一对应的枚举值。例如枚举键为key1,类名为bean1,那么其对应的类class属性便为bean1.class,则在数据类型集合中的表现形式则为key1(bean1.class)。通过上述操作可以获得各个键及其对应的类class属性,便可构建枚举类型的数据类型集合。例如数据类型集合object2rawclass可以定义为:

enumobject2rawclass{

key1(bean1.class),

key2(bean2.class),

key3(bean3.class)……}。

这样设置的好处在于,预先将每个共享对象的原生数据类型进行存储,提高了后续目标获取对象的获取效率,进一步提高目标活动窗口对象数据共享的有效性和可用性。

s260、将初始获取对象由祖先类object类型强制转换为目标类class对象的类型,获得目标获取对象。

具体地,确定目标获取对象的目标类class对象之后,便是确定了初始获取对象的原生数据类型。之后,将初始获取对象转换为目标类class对象的类型,便可获得目标获取对象,即将初始获取对象由祖先类object类型强制转换为目标类class对象类型,该类型转换之后的初始获取对象便是目标获取对象。

本实施例的技术方案,通过目标获取对象对应的对象标识获取初始获取对象,获得了目标获取对象的数据基础。通过对象标识从数据类型集合中获取目标类class对象,获得了目标获取对象的数据类型。通过将初始获取对象强制类型转换为目标类class对象类型,获得了目标获取对象。进一步实现了在目标活动窗口对象的作用域内进行高效的数据共享。

实施例三

本实施例在上述实施例一的基础上,增加了数据类型集合构建的步骤。在此基础上,增加了目标活动窗口对象的共享数据的读取步骤。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图3,本实施例提供的活动窗口的数据共享方法包括:

s310、若数据类型集合为关联容器map类型,则以待共享对象的键作为数据类型集合中的map键。

具体地,在实际操作过程中,存在数据更新的情况,预先构建的枚举类型的数据类型集合难免存在数据遗漏的情况,这样便无法获取被遗漏的共享对象的原生数据类型。本实施例中为了实现数据类型集合的动态扩充,将数据类型集合设置为关联容器map类型。这样,便可在存储每一个共享对象之前,将该共享对象的原生数据类型进行存储。

具体实施时,由于待共享对象和目标共享对象的数据内容是一致的,只是数据类型不同,故将目标共享对象的目标键作为待共享对象的键,便于后续的对象查找与确定。同样地,将该目标键作为数据类型集合中map结构的键(即map键)。

s320、通过待共享对象调用类class对象获取函数,获得待共享对象的类class对象,作为与map键对应的map值。

具体地,确定了map键之后,需要确定与其一一对应的值,即map值。具体实施时,通过待共享对象bean1,调用类class对象获取函数getclass(),便可获得待共享对象的类class对象,将其作为map值。

s330、以map键和map值为函数输入参数,调用数据类型集合的集合元素添加函数,将map键和map值对应添加至数据类型集合。

具体地,将上述获得的map键和map值作为函数输入参数,通过数据类型集合的集合元素添加函数put(map键,map值),将上述map键(目标键)和map值(类class对象)一一对应地添加至数据类型集合。至此,将待共享对象的原生数据类型信息动态添加至数据类型集合中。

s340、依据待共享对象确定目标共享对象。

s350、以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象。

s360、调用目标数据缓存对象中的数据存储函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象。

s370、以目标获取对象的对象标识为函数输入参数,调用目标数据缓存对象中的数据读取函数,从目标数据对象中读取与对象标识一一对应的值,作为初始获取对象。

需要说明的是,只要对目标获取对象进行过对象存储操作,便可在目标数据对象中读取到初始获取对象。反之,如果从未对目标获取对象进行过对象存储操作,那么目标数据对象中便不可能存储其对象信息,此时也就获取不到初始获取对象,也就无需执行后续操作。

s380、依据对象标识,从数据类型集合中获得目标获取对象的目标类class对象。

同样地,只要对目标获取对象进行过对象存储操作,便可在数据类型集合中存储其原生数据类型信息,此时便可获取到目标类class对象。反之,如果从未对目标获取对象进行过对象存储操作,那么数据类型集合中便不可能存储其原生数据类型信息,此时也就获取不到目标类class对象,同样无需执行后续操作。

s390、将初始获取对象由祖先类object类型强制转换为目标类class对象的类型,获得目标获取对象。

本实施例的技术方案,通过在由待共享对象生成目标共享对象之前,通过待共享对象调用类class对象获取函数,获得待共享对象的类class对象,作为与map键对应的map值,获得了待共享对象的原生数据类型。通过以map键和map值为函数输入参数,调用数据类型集合的集合元素添加函数,将map键和map值对应添加至数据类型集合,实现了数据类型集合中集合元素的动态添加,提高了数据类型集合的数据变化灵活性,从而使得目标活动窗口对象中任何数据类型的共享数据均可进行存储以共享,进一步提高了目标活动窗口对象中共享数据的共享可行性和共享效率。

以下是本发明实施例提供的活动窗口的数据共享装置的实施例,该装置与上述各实施例的活动窗口的数据共享方法属于同一个发明构思,在活动窗口的数据共享装置的实施例中未详尽描述的细节内容,可以参考上述活动窗口的数据共享方法的实施例。

实施例四

本实施例提供一种活动窗口的数据共享装置,参见图4,该装置具体包括:

目标共享对象确定模块410,用于依据待共享对象确定目标共享对象,目标共享对象的数据结构为键值对结构,且目标共享对象的目标值的数据类型为祖先类object类型;

目标数据缓存对象获取模块420,用于以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象,其中,目标映射关系对象用于存储活动窗口对象与数据缓存对象之间的一一对应关系;

目标共享对象存储模块430,用于调用目标数据缓存对象中的数据存储函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象。

可选地,在上述装置的基础上,该装置还包括目标获取对象获取模块,用于:

在从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象之后,以目标获取对象的对象标识为函数输入参数,调用目标数据缓存对象中的数据读取函数,从目标数据对象中读取与对象标识一一对应的值,作为初始获取对象;

依据对象标识,从数据类型集合中获得目标获取对象的目标类class对象,其中,数据类型集合用于存储目标活动窗口对象中各个共享对象对应的各个键以及与各个键一一对应的各个类class对象;

将初始获取对象由祖先类object类型强制转换为目标类class对象的类型,获得目标获取对象。

进一步地,在上述装置的基础上,该装置还包括第一数据类型集合构建模块,用于若数据类型集合为枚举类型,则通过如下方式预先构建数据类型集合:

获取目标活动窗口对象中与各个共享对象一一对应的各个键和各个类名;

对于任意一个键,以键作为数据类型集合中的枚举键,并通过与枚举键对应的类名访问类class属性,获得枚举键对应的类class对象,作为数据类型集合中与枚举键对应的枚举值;

依据各个枚举键以及与各个枚举键一一对应的各个枚举值,构建数据类型集合。

进一步地,在上述装置的基础上,该装置还包括第二数据类型集合构建模块,用于:

若数据类型集合为关联容器map类型,则在依据待共享对象确定目标共享对象之前,以待共享对象的键作为数据类型集合中的map键;

通过待共享对象调用类class对象获取函数,获得待共享对象的类class对象,作为与map键对应的map值;

以map键和map值为函数输入参数,调用数据类型集合的集合元素添加函数,将map键和map值对应添加至数据类型集合。

可选地,在上述装置的基础上,该装置还包括目标映射关系对象获取模块,用于:

在从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象之前,在数据缓存类的构造函数中,调用第一初始化子函数,初始化预先定义的第一映射关系对象,获得第二映射关系对象;

根据各个活动窗口对象的上下文对象,调用哈希码值获取子函数,获取各个上下文对象的哈希码值;

调用第二映射关系对象中的元素添加函数,将各个哈希码值和各个数据缓存对象一一对应地存储至第二映射关系对象,获得目标映射关系对象。

进一步地,目标数据缓存对象获取模块420包括对象获取函数执行子模块,用于通过如下步骤实现从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象的功能:

判断对象获取函数的输入参数是否为空对象;

若否,则通过目标上下文对象,调用哈希码值获取子函数,获取目标上下文对象的目标哈希码值;

以目标哈希码值为函数输入参数,调用目标映射关系对象中的对象获取子函数,从目标映射关系对象中获取与目标活动窗口对象一一对应的目标数据缓存对象。

可选地,在上述装置的基础上,该装置还包括数据释放模块,用于:

在目标活动窗口销毁时,以目标上下文对象为函数输入参数,调用目标数据缓存对象中的对象释放函数,删除目标映射关系对象中的目标数据缓存对象与目标活动窗口对象之间的映射关系。

通过本发明实施例四的一种活动窗口的数据共享装置,实现了更加精确且快速地进行android系统中活动窗口页面作用域内批量数据的共享,且能够有效避免各个活动窗口页面之间共享数据的相互影响。

本发明实施例所提供的活动窗口的数据共享装置可执行本发明任意实施例所提供的活动窗口的数据共享方法,具备执行方法相应的功能模块和有益效果。

值得注意的是,上述活动窗口的数据共享装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

实施例五

参见图5,本实施例提供了一种设备500,其包括:一个或多个处理器520;存储装置510,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器520执行,使得一个或多个处理器520实现本发明实施例所提供的活动窗口的数据共享方法,包括:

依据待共享对象确定目标共享对象,目标共享对象的数据结构为键值对结构,且目标共享对象的目标值的数据类型为祖先类object类型;

以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象,其中,目标映射关系对象用于存储活动窗口对象与数据缓存对象之间的一一对应关系;

调用目标数据缓存对象中的数据存储函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象。

当然,本领域技术人员可以理解,处理器520还可以实现本发明任意实施例所提供的活动窗口的数据共享方法的技术方案。

图5显示的设备500仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图5所示,该设备500包括处理器520、存储装置510、输入装置530和输出装置540;设备中处理器520的数量可以是一个或多个,图5中以一个处理器520为例;设备中的处理器520、存储装置510、输入装置530和输出装置540可以通过总线或其他方式连接,图5中以通过总线550连接为例。

存储装置510作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的活动窗口的数据共享方法对应的程序指令/模块(例如,活动窗口的数据共享装置中的目标共享对象确定模块、目标数据缓存对象获取模块和目标共享对象存储模块)。

存储装置510可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置510可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置510可进一步包括相对于处理器520远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置530可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。

实施例六

本实施例提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种活动窗口的数据共享方法,该方法包括:

依据待共享对象确定目标共享对象,目标共享对象的数据结构为键值对结构,且目标共享对象的目标值的数据类型为祖先类object类型;

以目标活动窗口对象对应的目标上下文对象为函数输入参数,通过数据缓存类调用对象获取函数,从目标映射关系对象中获取与目标活动窗口对象对应的目标数据缓存对象,其中,目标映射关系对象用于存储活动窗口对象与数据缓存对象之间的一一对应关系;

调用目标数据缓存对象中的数据存储函数,将目标共享对象的目标键和目标值对应存储至目标数据缓存对象中的目标数据对象。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上的方法操作,还可以执行本发明任意实施例所提供的活动窗口的数据共享方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所提供的活动窗口的数据共享方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1