掌桥专利:专业的专利平台
掌桥专利
首页

基于路由的页面跳转方法、装置、电子设备及存储介质

文献发布时间:2023-06-23 06:30:03


基于路由的页面跳转方法、装置、电子设备及存储介质

技术领域

本申请涉及应用程序开发技术领域,尤其涉及一种基于路由的页面跳转方法、装置、电子设备及存储介质。

背景技术

移动应用程序中的页面跳转是实现应用功能和用户交互的关键。目前在原生路由系统中主要有两种页面跳转方法,分别是显示意图(Explicit Intent)和隐式意图(Implicit Intent)。然而,这两种方法各自存在一些缺陷和不足之处。

显示意图作为一种跳转方式,需要依赖于目标页面的具体类。然而,这种方式存在类之间的依赖关系较大的问题,特别是在模块拆分的项目中,可能会找不到目标类,导致跳转失败。与显示意图相比,隐式意图通过在应用程序的清单配置文件中定义规则来实现跳转。尽管如此,这种方法的可扩展性较差。隐式意图要求确保页面跳转规则的唯一性,否则可能出现多个跳转目标,从而导致安全风险。同时,如果目标组件(如Activity)被删除,将无法找到跳转目标,从而导致应用程序崩溃。此外,原生路由方式的跳转过程不能由开发者控制,只能由系统管理。这意味着,当跳转失败时,开发者无法进行降级处理,只能直接抛出异常。

由此可见,现有的原生路由系统中的显示意图和隐式意图在实现移动应用程序中的页面跳转时存在诸多问题,如依赖关系大、可扩展性差和安全风险等。

发明内容

有鉴于此,本申请实施例提供了一种基于路由的页面跳转方法、装置、电子设备及存储介质,以解决现有技术存在的依赖关系大、可扩展性差和安全风险等问题。

本申请实施例的第一方面,提供了一种基于路由的页面跳转方法,包括:将预先构造的消息载体传入到路由中,并在应用程序类的页面模块中创建消息通道;在消息通道的执行动作方法中创建目标跳转意图对象,目标跳转意图对象用于表示原始页面与目标页面之间的跳转意图关系;对执行动作方法中的参数进行遍历,将参数中的键值对逐个添加到目标跳转意图对象中;依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识,利用消息通道标识对消息通道映射表进行查询,获取与消息通道标识对应的消息通道;调用消息通道的执行动作方法来执行跳转逻辑,以便从原始页面跳转到目标页面。

本申请实施例的第二方面,提供了一种基于路由的页面跳转装置,包括:传入模块,被配置为将预先构造的消息载体传入到路由中,并在应用程序类的页面模块中创建消息通道;创建模块,被配置为在消息通道的执行动作方法中创建目标跳转意图对象,目标跳转意图对象用于表示原始页面与目标页面之间的跳转意图关系;遍历模块,被配置为对执行动作方法中的参数进行遍历,将参数中的键值对逐个添加到目标跳转意图对象中;查询模块,被配置为依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识,利用消息通道标识对消息通道映射表进行查询,获取与消息通道标识对应的消息通道;调用模块,被配置为调用消息通道的执行动作方法来执行跳转逻辑,以便从原始页面跳转到目标页面。

本申请实施例的第三方面,提供了一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述方法的步骤。

本申请实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

通过将预先构造的消息载体传入到路由中,并在应用程序类的页面模块中创建消息通道;在消息通道的执行动作方法中创建目标跳转意图对象,目标跳转意图对象用于表示原始页面与目标页面之间的跳转意图关系;对执行动作方法中的参数进行遍历,将参数中的键值对逐个添加到目标跳转意图对象中;依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识,利用消息通道标识对消息通道映射表进行查询,获取与消息通道标识对应的消息通道;调用消息通道的执行动作方法来执行跳转逻辑,以便从原始页面跳转到目标页面。本申请基于路由的页面跳转方法实现了类依赖解耦,可进行模块拆分,提升开发效率,通过修改路由,避免抛出异常。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1是本申请实施例提供的基于路由的页面跳转方法的流程示意图;

图2是本申请实施例提供的路由中转站的基本组件和结构示意图;

图3是本申请实施例提供的基于路由的页面跳转装置的结构示意图;

图4是本申请实施例提供的电子设备的结构示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。

现有技术中,原生路由系统中的两种页面跳转方法:显示意图和隐式意图。原生路由系统是用于在移动应用程序中实现页面之间跳转的方法。

显示意图:这种跳转方式依赖于目标页面的具体类。但这种方式有一些缺点,比如:类之间的依赖关系很大,对于那些经过模块拆分的项目来说,可能找不到目标类。

隐式意图:这种跳转方式需要在应用程序的清单配置文件(Manifest)中定义一些规则,但它的可扩展性较差。这种方法需要确保scheme(一种标识用于标识页面跳转的规则)是唯一的,否则可能出现多个跳转目标,导致安全风险。另外,如果目标组件(如Activity)被删除,也会找不到跳转目标,从而导致应用程序崩溃(crash)。使用原生路由方式的跳转过程无法由开发者控制,只能由系统管理。这意味着,当跳转失败时,开发者无法进行降级处理,只能直接抛出异常。

综上所述,目前移动应用程序中的两种页面跳转方式,即显示意图和隐式意图,它们在实现移动应用程序中的页面跳转时存在诸多问题,如依赖关系大、可扩展性差和安全风险等。

有鉴于此,本申请实施例为解决上述问题,提供了一种基于路由的页面跳转方法。本申请通过预先构造的消息载体传入到路由中,并在应用程序类的页面模块中创建消息通道,实现了原始页面与目标页面之间的跳转意图关系。在消息载体的类中定义消息数据属性,并利用新建方法、参数设置方法和动作设置方法来创建新的消息载体,以实现传递页面跳转时所需的数据。通过实现注册方法和设置单例模式,本申请在路由中注册消息通道,并处理不同进程中的页面模块之间的消息处理和转发。本申请还利用消息发送的反馈类返回页面跳转的结果,使得开发者可以在跳转失败时,进行降级处理,避免直接抛出异常。

下面结合附图以及具体实施例对本申请技术方案的内容进行详细描述。

图1是本申请实施例提供的基于路由的页面跳转方法的流程示意图。图1的基于路由的页面跳转方法可以由应用程序来执行。如图1所示,该基于路由的页面跳转方法具体可以包括:

S101,将预先构造的消息载体传入到路由中,并在应用程序类的页面模块中创建消息通道;

S102,在消息通道的执行动作方法中创建目标跳转意图对象,目标跳转意图对象用于表示原始页面与目标页面之间的跳转意图关系;

S103,对执行动作方法中的参数进行遍历,将参数中的键值对逐个添加到目标跳转意图对象中;

S104,依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识,利用消息通道标识对消息通道映射表进行查询,获取与消息通道标识对应的消息通道;

S105,调用消息通道的执行动作方法来执行跳转逻辑,以便从原始页面跳转到目标页面。

首先对本申请实施例在实际应用场景中涉及的一些技术术语进行解释,具体可以包括以下内容:

Application:在Android框架中,Application是一个系统组件,它代表整个应用程序。当Android应用程序启动时,系统会首先创建一个Application实例。简单来说,Application组件是在应用程序启动时自动创建的,它作为整个应用程序的入口和基础,提供了全局上下文和应用级别的资源。在程序开发中,开发者可以通过继承和定制Application类,来管理应用程序的全局状态和处理一些与整个应用程序相关的操作。

Activity:用户界面组件(Activity)是Android四大组件(Activity、Service、Broadcast Receiver和Content Provider)之一,它主要负责与用户进行交互。Activity可以理解为应用程序中的屏幕页面,当用户打开应用时,他们看到的各种界面和交互元素(比如按钮、文本框等)都是在Activity中展示的。在开发过程中,开发者会为应用程序创建一个或多个Activity,以实现不同功能和界面。每个Activity都有自己的生命周期,根据用户的操作和应用程序的状态变化,Activity会在不同的状态之间切换。

Context:上下文对象(Context)是Android系统提供的一个抽象类,它提供了访问与应用程序相关的资源和类的能力。Context是一个与应用程序相关的环境信息的载体。它能够帮助开发者访问应用程序中的各种资源(例如图片、字符串等)和组件(例如服务、广播接收器等),以及许多系统级别的功能(例如启动其他Activity、发送广播等)。在开发过程中,开发者会经常用到Context以实现不同的功能和操作。例如,可以通过Context来获取应用程序的资源文件,或者用Context来启动另一个Activity等。

HashMap:HashMap是一个基于哈希表的Map接口实现。HashMap可以理解为一种数据结构,它通过键值对(key-value)的形式来存储和管理数据。这意味着每个值(value)在HashMap中都有一个与之对应的唯一键(key)。通过这个键,可以方便地查询和访问到对应的值。

String:字符串是一种数据类型,用于存储文本数据。它是由一系列字符组成的序列,包括汉字、英语字母、数字、标点符号等。在计算机编程中,字符串通常用来表示文本信息,如文件名、网址、邮件内容等。字符串具有不可变性,即一旦创建后就不能再修改其内容,因此在需要修改字符串时,需要使用新的字符串变量来存储修改后的结果。

Any:Kotlin语言中的超类对象,其文中设计的参数类型带有“!”的表示该类型可以为空,Kotlin的语法结构。

AndroidManifest.xml:AndroidManifest.xml文件是整个Android应用程序的信息描述文件,它提供了应用程序的基本信息和配置,包括应用程序的组件、权限、功能需求等。简单地说,AndroidManifest.xml文件可以提供Android系统关于应用程序的基本信息,并且这个文件位于项目的根目录下。开发者在开发过程中需要在AndroidManifest.xml文件中配置各种信息,以确保应用程序在Android设备上正常运行。

需要说明的是,本申请中涉及的英文类名和方法名可自定义为其他名称,为了消除模块之间相互依赖调用,本申请将路由设计为一个消息中转站(或路由中转站),将所有模块都依赖于这个消息中转站,再通过这个路由中转站来实现各个模块之间的通信。下面结合附图对路由中转站的基本组件和结构进行详细说明,图2是本申请实施例提供的路由中转站的基本组件和结构示意图。如图2所示,该路由中转站的基本组件包含App入口、Module、Libs以及Route,其中:

App入口:这是整个程序的起始点,负责启动应用程序,在这个入口模块中,会进行消息通道的注册,以便程序中的各个组件可以通信。

Module1、Module2、Module3、Module4:这是四个不同的独立模块(也称页面模块),它们可以是与入口模块同一进程的组件,也可以运行在不同进程中。这些模块可以是应用程序中的功能模块,负责处理各种不同的业务逻辑。

Libs:这个目录用于存放一些公共的类库,在这里,本申请将路由功能独立出来,统一管理各个消息通道的名称。

Route:这是一个路由框架,负责注册和管理每个模块的消息通道,它控制消息发送,确保消息能够在各个组件之间正确传递。

由此可见,本申请涉及的应用程序的结构中包含App入口、独立模块、公共类库和路由框架。消息通道的注册在App入口模块中进行,路由框架负责管理消息通道并控制消息的发送。

下面结合图2所示的路由中转站的基本组件和结构,对路由中转站的使用方式及原理进行详细介绍,具体可以包括以下内容:

首先,在程序初始化时,在Application类(应用程序类)中建立消息通道,这样做的好处是可以让路由支持多进程。在Android应用程序中,多进程意味着Application类会在每个进程中执行一次,将通道的初始化放在Application类中,可以确保通道在每个进程中都被创建。

其次,实现具体的消息通道,首先创建一个具体的通道类(例如MainAction,名称可自定义),让这个类继承IAction类(消息通道类),然后实现IAction类中的抽象方法。根据具体的业务需求,在这个通道类中实现页面跳转的功能。

另外,当需要发送消息时,使用IRouter类(之前创建的消息处理核心类),调用IRouter类中的发送消息方法,传入消息载体和指定通道,这样就可以将消息发送到目标接收者。

在一些实施例中,在将预先构造的消息载体传入到路由中之前,本申请实施例的方法还包括:

通过预先定义的消息数据属性存储页面跳转时传递的数据,利用新建方法来创建新的消息载体,利用参数设置方法保存键值对,利用动作设置方法设置跳转动作的名称属性,以便构造出消息载体。

具体地,本申请实施例在将消息载体传入到路由之前,需要先构造一个发送消息的载体(即消息载体),消息载体也就是RouterReq类,这个类用于传递页面跳转相关的数据。下面将结合具体实施例对消息载体的构造过程及原理做详细说明。

在一些实施例中,通过预先定义的消息数据属性存储页面跳转时传递的数据,利用新建方法来创建新的消息载体,利用参数设置方法保存键值对,利用动作设置方法设置跳转动作的名称属性,包括:

在预设的消息载体的类中定义消息数据属性,消息数据属性的类型为哈希表;

在消息载体的类中创建一个新建方法,新建方法用于创建新的消息载体;

在消息载体的类中创建一个参数设置方法,参数设置方法用于将键和值作为参数存入消息数据哈希表中;

在消息载体的类中创建一个动作设置方法,动作设置方法用于将动作参数赋值给消息载体的类中的动作名称属性。

具体地,在构造消息载体时,首先,在RouterReq类(即消息载体的类)中定义一个名为actData的属性(即消息数据属性),该属性的类型为HashMap,用于存储页面跳转时需要传递的数据。然后再定义一个String类型的属性名为actionName,用于表示跳转动作的名称。

接下来,在RouterReq类中创建一个名为build()的方法(即新建方法)。在这个方法中,新建一个RouterReq对象并直接将这个对象返回,这样,就可以通过调用build()方法来获取一个新的RouterReq实例。

然后,在RouterReq类中新建一个名为setData(mKey: String,mValue: Any!)的方法(即参数设置方法)。在这个方法中,将mKey和mValue两个参数存入actData属性的actData哈希表中。这样,就可以通过这个方法将不同的键值对存储到actData中,以便在页面跳转时使用。

最后,新建一个名为setAction(action: String)的方法(即动作设置方法)。在这个方法中,将action参数(即动作参数)直接赋值给RouterReq类中的actionName属性(即动作名称属性)。这样,就可以通过调用setAction()方法来指定跳转动作的名称。

由此可见,本申请实施例提供了创建一个RouterReq类的完整实现过程,该类用于封装页面跳转相关的数据和动作名称。通过setData()和setAction()方法,本申请实施例可以设置需要传递的数据和跳转动作名称,并使用build()方法创建一个新的RouterReq实例。

进一步地,本申请实施例在将预先构造的消息载体传入到路由之前,还需要新建一个IRouter类(即路由),将其作为消息处理的核心部分,用于处理转发消息。IRouter的主要功能是处理和转发不同消息通道进来的消息,使得这些消息能正确到达目标。本申请实施例创建的路由IRouter具有以下特征:

维护一个队列:在IRouter类内部,通过使用一个队列来接收和存储从不同消息通道收到的消息。

设计为单例模式:为了确保整个应用程序中只有一个IRouter实例存在,本申请实施例将其设计为单例模式。这样,无论何时需要IRouter的功能,都会使用同一个实例,确保数据一致性。

支持多线程:通过单例模式,可以使IRouter类支持多线程,即在多个线程中同时处理和转发消息,提高效率。

实现通道建立和发送消息逻辑:在IRouter类内部,需要编写代码实现建立消息通道的功能,以及将消息发送到正确的目标。

因此,IRouter类是一个负责处理和转发消息的核心类,它使用队列接收消息,并通过单例模式支持多线程。本申请实施例需要在这个类中实现消息通道的建立和发送消息的逻辑。

在一些实施例中,在将创建的消息载体传入到路由IRouter内部之后,本申请实施例将在应用程序类的页面模块中创建消息通道(IAction),IAction由路由IRouter控制,发送消息到指定的消息通道上,通道使用抽象方法实现,可以发送不同类型的消息。

在实际应用中,IAction是一个消息通道类,用于在不同的消息通道上发送和处理消息。IAction类是在IRouter类的控制下工作的。IRouter负责处理和转发消息,而IAction类负责实际在消息通道上发送消息。IAction类的功能是在指定的消息通道上发送消息,这样消息能够被正确地传递到目标。IAction类中的通道使用抽象方法来实现,这样可以为不同类型的消息提供灵活的扩展性。开发者可以根据需要实现具体的消息通道,从而可以灵活地发送不同类型的消息。

在一些实施例中,在依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识之前,本申请实施例的方法还包括:

在路由中实现注册方法,注册方法用于判断消息通道映射表中是否包含预定的消息通道标识,当不包含预定的消息通道标识时,将预定的消息通道标识以及消息通道标识对应的消息通道存储到消息通道映射表中,以便在路由中注册消息通道。

具体地,本申请实施例在IRouter类中定义一个名为actions的属性,actions属性可以理解为消息通道映射,它表示一个存储了所有消息通道的映射表,用于快速查询和管理不同的消息通道。actions属性的类型为HashMap,用于存储所有消息通道(IAction)。

之后,本申请实施例实现一个注册方法registAction(actionName:String,action: IAction)。在这个注册方法中,先判断消息通道映射表(actions)中是否已经包含了给定的消息通道标识(actionName)。如果不包含actionName,就将消息通道标识actionName和消息通道action存入消息通道映射表actions中。本申请实施例利用注册方法向IRouter类中注册各个消息通道。

进一步地,RouterReq表示消息发送的载体类(即消息载体),在消息载体的里面定义两个参数,即通道名称和消息体,通道名称用于识别要用哪个通道,消息体就是要发送的具体消息,把消息体的类型定义为哈希表,让其支持不同的消息类型。

在本申请实施例在调用IRouter发送消息时,将实现一个queryReq(req:RouterReq)方法。此方法通过RouterReq对象获取RouterReq的actionName属性,并根据actionName从actions中查找并返回相应的IAction。也就是说,实现一个名为queryReq(req: RouterReq)的方法,这个方法通过RouterReq对象获取RouterReq的actionName属性,然后根据actionName从actions映射表中查找并返回相应的IAction(消息通道)。简单来说,这个方法是通过提供的RouterReq请求对象来查询并获取与请求对应的消息通道。

在一些实施例中,调用消息通道的执行动作方法来执行跳转逻辑,包括:

创建消息发送的反馈类,利用预设的查询请求方法获取请求的消息通道,调用消息通道的执行动作方法来执行页面跳转逻辑,并利用消息发送的反馈类返回页面跳转的结果。

具体地,在本申请实施例在调用IRouter发送消息时,还实现一个名为sendMsg(cxt: Context, req:RouterReq)的方法。这个方法首先创建一个RouterRes对象用于返回跳转结果。然后调用前述实施例中的queryReq方法获取到对应的IAction通道,再调用IAction的actionTo方法(即执行动作方法)来执行具体的跳转逻辑。最后,返回RouterRes对象。

也就是说,本申请实施例还实现一个叫做“sendMsg”的方法,它接收两个参数:一个是“cxt”,表示上下文对象,另一个是“req”,表示路由请求对象。在这个方法里,首先创建一个“RouterRes”对象,用于返回页面跳转的结果。接着调用“queryReq”方法,以便获得与请求对应的“IAction”通道。然后调用“IAction”的“actionTo”方法来执行具体的页面跳转逻辑。最后,直接返回“RouterRes”对象。简单来说,这个方法就是将传入的路由请求处理并执行页面跳转,然后返回跳转的结果。

进一步地,RouterRes表示消息发送的反馈类,用于通知发送者消息发送的结果,可以灵活定义,比如状态码(code)、消息内容(msg)等。本申请上述实施例阐述了如何使用IRouter类发送消息的过程,本申请通过先注册消息通道,然后根据请求查询相应的通道,最后利用sendMsg方法实际发送消息并执行跳转操作。

前述实施例对消息载体的构造、消息通道的构造以及调用IRouter发送消息的具体实现过程及原理分别做了详细说明。下面结合具体实施例对本申请基于路由的页面跳转方案的具体实现过程进行详细说明。

以两个页面模块Module之间的跳转为例,对如何在两个不同的页面模块(Module1和Module2)中分别构建消息通道IAction,并在不同的进程中运行的过程进行说明,具体可以包括以下内容:

步骤1:在Module1中创建一个名为Activity1的新活动,并创建一个名为Action1的类,让这个类实现IAction接口。然后,重写actionTo(context: Context,data: HashMap)方法(即执行动作方法),这个方法用来根据传入的上下文(Context)和数据(data),以键值对形式存储在HashMap中,并执行特定的动作,如页面跳转等。

步骤2:Action1类代表跳转到Activity1的动作。在actionTo方法中,创建一个名为mIntent的Intent对象(即目标跳转意图对象),这个对象用于表示一个应用程序执行动作的意图,例如跳转到另一个页面。

步骤3:利用Kotlin语言的特性,遍历传递给actionTo方法的data参数,通过调用mIntent.putExtra()方法将data中的键值对逐个添加到mIntent对象中。

步骤4:调用context.startActivity()方法,使用mIntent对象启动Activity1,实现页面跳转。

除此之外,本申请实施例还在Module2中创建一个名为Activity2的新活动,并创建一个名为Action2的类,让这个类实现IAction接口。接着,重复前面完成的步骤2至步骤4的内容。

为了让第一页面模块Module1和第二页面模块Module2运行在不同的进程中,在Module2目录下的AndroidManifest.xml配置文件中,为Activity2添加android:process=":module2"属性。

需要强调的是,这里的属性android:process=":module2"中的":module2"可以随意命名,但是基于安全考虑,在实际应用中,需要以:开头,代表是私有进程,表示只有当前app可以访问,其他app不可以访问。

根据本申请实施例提供的技术方案,本申请实施例通过在两个独立的模块中分别构建消息通道IAction,以及实现在不同进程中运行这两个模块,通过遍历data参数并将键值对添加到Intent对象中,可以实现在两个活动之间传递数据并实现页面跳转。

在一些实施例中,本申请实施例的方法还包括:

调用注册方法将消息通道作为参数传入应用程序类的文件中进行注册,并将路由设置为单例模式,以使路由处理不同进程中的页面模块之间的消息处理和转发。

具体地,在整个工程的Application文件(即应用程序类的文件)中,调用两次registAction方法,分别将Action1(即第一页面模块)和Action2(即第二页面模块)作为参数传入进行注册,这里需要将IRouter对象的获取设置为单例模式(sington),因为Module1和Module2是处于不同的进程。

在一些实施例中,本申请实施例的方法还包括:

在应用程序的入口模块中创建用户界面组件,并在用户界面组件中设置与页面模块对应的按钮组件,响应于用户对按钮组件的点击操作,跳转到按钮组件对应页面模块的用户界面组件中。

具体地,在App入口模块中,新建一个Activity(即用户界面组件),命名为EntranceActivity,在这个Activity中新增两个按钮,Button1和Button2,其中,点击Button1跳转到Module1中的Activity,点击Button2跳转到Module2中的Activity,当点击按钮时,首先获取到IRouter对象,接着调用sendMsg方法传入上下文对象和RouterReq参数就行了。

在实际应用中,Button1中的RouterReq对象的setAction传入的值对应Action1,Button2中的RouterReq对象的setAction传入的值对应Action2。

本申请实施例还提供跳转失败时的降级处理,在前述实施例的步骤中如果IAction通道没有注册,则会发生跳转失败抛出异常的情况,在获取到返回的IAction时,对这个IAction进行是否为空判断,如果为空就进行下一步处理,如直接Toast提示用户或者可以直接构造一个RouterRes对象,设置一个错误状态码(code = -1),返回给调用者,让调用者进行统一错误处理,统一处理的方式如下:1. 新建一个公用的错误页(ErrorActivity);2. 判断RouterRes对象中的code,如果code等于-1,那就重新跳转到步骤1中的ErrorActivity,并在该页面中显示一个文本用于提示用户。

根据本申请实施例提供的技术方案,本申请实施例基于路由的页面跳转方法在实现移动应用程序中的页面跳转时,相较于现有的原生路由系统中的显示意图和隐式意图,具有以下显著技术效果:

实现了类依赖解耦:通过使用消息载体和消息通道来处理页面跳转逻辑,避免了直接依赖于目标页面的具体类。这使得模块拆分更为容易,从而提升了开发效率。

支持多进程下模块间的通信:本申请采用路由处理不同进程中的页面模块之间的消息处理和转发,从而实现了在多进程下模块间的通信。

可以修改路由逻辑:本申请允许开发者在跳转失败时,对路由逻辑进行修改,例如进行降级处理,避免直接抛出异常。这有助于提高应用程序的稳定性和用户体验。

下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。

图3是本申请实施例提供的基于路由的页面跳转装置的结构示意图。如图3所示,该基于路由的页面跳转装置包括:

传入模块301,被配置为将预先构造的消息载体传入到路由中,并在应用程序类的页面模块中创建消息通道;

创建模块302,被配置为在消息通道的执行动作方法中创建目标跳转意图对象,目标跳转意图对象用于表示原始页面与目标页面之间的跳转意图关系;

遍历模块303,被配置为对执行动作方法中的参数进行遍历,将参数中的键值对逐个添加到目标跳转意图对象中;

查询模块304,被配置为依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识,利用消息通道标识对消息通道映射表进行查询,获取与消息通道标识对应的消息通道;

调用模块305,被配置为调用消息通道的执行动作方法来执行跳转逻辑,以便从原始页面跳转到目标页面。

在一些实施例中,图3的构造模块306在将预先构造的消息载体传入到路由中之前,通过预先定义的消息数据属性存储页面跳转时传递的数据,利用新建方法来创建新的消息载体,利用参数设置方法保存键值对,利用动作设置方法设置跳转动作的名称属性,以便构造出消息载体。

在一些实施例中,图3的构造模块306在预设的消息载体的类中定义消息数据属性,消息数据属性的类型为哈希表;在消息载体的类中创建一个新建方法,新建方法用于创建新的消息载体;在消息载体的类中创建一个参数设置方法,参数设置方法用于将键和值作为参数存入消息数据哈希表中;在消息载体的类中创建一个动作设置方法,动作设置方法用于将动作参数赋值给消息载体的类中的动作名称属性。

在一些实施例中,图3的查询模块304在依据路由中预先设置的消息通道映射表,从消息载体中获取消息通道标识之前,在路由中实现注册方法,注册方法用于判断消息通道映射表中是否包含预定的消息通道标识,当不包含预定的消息通道标识时,将预定的消息通道标识以及消息通道标识对应的消息通道存储到消息通道映射表中,以便在路由中注册消息通道。

在一些实施例中,图3的调用模块305创建消息发送的反馈类,利用预设的查询请求方法获取请求的消息通道,调用消息通道的执行动作方法来执行页面跳转逻辑,并利用消息发送的反馈类返回页面跳转的结果。

在一些实施例中,图3的设置模块307调用注册方法将消息通道作为参数传入应用程序类的文件中进行注册,并将路由设置为单例模式,以使路由处理不同进程中的页面模块之间的消息处理和转发。

在一些实施例中,图3的设置模块307在应用程序的入口模块中创建用户界面组件,并在用户界面组件中设置与页面模块对应的按钮组件,响应于用户对按钮组件的点击操作,跳转到按钮组件对应页面模块的用户界面组件中。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

图4是本申请实施例提供的电子设备4的结构示意图。如图4所示,该实施例的电子设备4包括:处理器401、存储器402以及存储在该存储器402中并且可以在处理器401上运行的计算机程序403。处理器401执行计算机程序403时实现上述各个方法实施例中的步骤。或者,处理器401执行计算机程序403时实现上述各装置实施例中各模块/单元的功能。

示例性地,计算机程序403可以被分割成一个或多个模块/单元,一个或多个模块/单元被存储在存储器402中,并由处理器401执行,以完成本申请。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序403在电子设备4中的执行过程。

电子设备4可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备4可以包括但不仅限于处理器401和存储器402。本领域技术人员可以理解,图4仅仅是电子设备4的示例,并不构成对电子设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如,电子设备还可以包括输入输出设备、网络接入设备、总线等。

处理器401可以是中央处理单元(Central Processing Unit,CPU),也可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器402可以是电子设备4的内部存储单元,例如,电子设备4的硬盘或内存。存储器402也可以是电子设备4的外部存储设备,例如,电子设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器402还可以既包括电子设备4的内部存储单元也包括外部存储设备。存储器402用于存储计算机程序以及电子设备所需的其它程序和数据。存储器402还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

相关技术
  • 路由数据处理方法、装置、电子设备及存储介质
  • 基于大数据的信用评估方法、装置、电子设备及存储介质
  • 一种基于Slam定位方法、装置、电子设备及计算机存储介质
  • 基于区块链的交易验证方法、装置、存储介质及电子设备
  • 基于三维模型的美妆方法、装置、电子设备和存储介质
  • 页面跳转方法、装置、计算机可读存储介质及电子设备
  • 多页签页面跳转定位方法、装置、电子设备及存储介质
技术分类

06120116008922