一种弹窗的输出方法、装置及终端与流程

文档序号:12176640阅读:207来源:国知局
一种弹窗的输出方法、装置及终端与流程

本发明涉及计算机通信技术领域,尤其涉及一种弹窗的输出方法、装置及终端。



背景技术:

弹窗是指打开网页、软件、手机APP等的时候自动弹出的窗口,通常因某种逻辑被触发的,覆盖在屏幕页面上的浮层,提示框和控件等均被称之为弹窗。弹窗的常规输出方法为:构建一个弹窗的抽象基类,让应用程序中的弹窗都继承于这个抽象基类,同时维护一个弹窗队列,在多个弹窗同时输出时按照先入先出的顺序,让弹窗依次输出,然而,这种方式存在以下问题:

(1)不适用于不支持多继承的编程环境:弹窗多种多样,在不支持多继承的编程环境下,难以以公共抽象基类的思想来统一管理一个弹窗队列,因此,这种方式难以满足弹窗显示方式的多样性需求,从而影响用户体验。

(2)对于不方便获取弹窗的实现类(弹窗的实现类为实现所述弹窗的显示功能的类)的实例的模块,在需要处理弹窗时只能依赖复杂的回调来实现与弹窗相关的业务逻辑,导致业务代码的复杂程度增加。

(3)难以实现复杂的显示逻辑,比如,下述弹窗逻辑难以实现:A弹窗只能在B页面输出,若B页面被隐藏时,则需要延至B页面回到前台后才能输出;或者,A弹窗在输出时,如果当前有其他弹窗正在输出,则本次启动周期内A弹窗不得输出。



技术实现要素:

为了解决上述技术问题,本发明提出了一种弹窗的输出方法、装置及终端。通过由弹窗任务管理器对弹窗任务进行统一管理,每个弹窗任务中均包含显示函数,而每个显示函数中均包含需要由弹窗的实现类实现的回调函数的方式,达到既能够满足弹窗显示的多样性需求,又能够实现复杂的显示逻辑的目的。

本发明是以如下技术方案实现的,一种弹窗的输出方法,所述方法包括:

检测激活指令,若接收到所述激活指令,则判断弹窗任务管理器中是否存在弹窗任务:

若是,则获取排在首位的弹窗任务,将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,由所述输出页面控制弹窗的输出,并将所述弹窗任务从所述弹窗任务管理器中删除;所述显示函数中包括用于对所述弹窗进行显示的回调函数。

进一步地,所述弹窗任务中包括弹窗的显示函数和弹窗的优先级,所述弹窗任务管理器按照弹窗的优先级从高到低的顺序对弹窗所在的弹窗任务进行排序。

进一步地,获取排在首位的弹窗任务之后,还包括:

判断是否允许在当前运行环境输出所述弹窗任务对应的弹窗:

若是,则将所述弹窗任务中的显示函数的处置权交由所述弹窗的输出页面,并将所述弹窗任务从所述弹窗任务管理器中删除;

若否,直接将所述弹窗任务从所述弹窗任务管理器中删除。

进一步地,还包括:

在所述弹窗任务中获取弹窗的输出页面的信息;

根据所述信息,将所述弹窗任务的显示函数的处置权交由所述弹窗的输出页面。

进一步地,通过事件总线和/或广播将所述弹窗任务的显示函数的处置权交由弹窗的输出页面。

进一步地,将所述弹窗任务的显示函数的处置权交由弹窗的输出页面后,还包括:

根据所述输出页面的运行环境判断所述弹窗是否允许被输出:

若是,则由所述弹窗任务中的显示函数调用回调函数输出所述弹窗;

若否,不输出所述弹窗。

进一步地,若所述弹窗被关闭,则向弹窗任务管理器发送用于表示所述弹窗被关闭的通知消息。

进一步地,由弹窗类实现所述回调函数,所述弹窗类包括原生的弹窗类、构造的视图类和/或构造的窗口类。

一种弹窗输出装置,包括:

激活指令检测模块,用于检测激活指令;

判断模块,用于判断弹窗任务管理器中是否存在弹窗任务;

弹窗任务处置模块,用于获取排在首位的弹窗任务,将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,并将所述弹窗任务从所述弹窗任务管理器中删除;

页面输出模块,用于所述输出页面控制弹窗的输出;

弹窗任务管理器,用于对弹窗任务进行管理。

进一步地,所述弹窗任务中包括弹窗的显示函数和弹窗的优先级,所述弹窗任务管理器按照弹窗的优先级从高到低的顺序对弹窗所在的弹窗任务进行排序。

进一步地,所述弹窗任务管理器还包括:

弹窗判断第一子模块,用于判断是否允许在当前运行环境输出所述弹窗任务对应的弹窗:

若是,则由弹窗任务处置模块将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,并将所述弹窗任务从所述弹窗任务管理器中删除;若否,则由弹窗任务处置模块直接将所述弹窗任务从所述弹窗任务管理器中删除。

进一步地,所述弹窗任务处置模块还包括:

页面信息获取子模块,用于在所述弹窗任务中获取弹窗的输出页面的信息;

处置权转移子模块,用于根据所述信息,将所述弹窗任务的显示函数的处置权交由所述弹窗的输出页面。

进一步地,所述页面输出模块包括:

弹窗判断第二子模块,用于根据所述输出页面的运行环境判断所述弹窗是否允许被输出;

显示子模块,用于在所述输出页面由显示函数调用回调函数对所述弹窗进行显示。

进一步地,所述页面输出模块还包括:

通知子模块,用于若所述弹窗被关闭,则向弹窗任务管理器发送用于表示所述弹窗被关闭的通知消息。

一种弹窗输出终端,所述终端包括上述的弹窗输出装置。。

本发明提出的一种弹窗的输出方法、装置及终端,具有如下有益效果:

1、通过让弹窗的实现类(弹窗的实现类为实现所述弹窗的显示功能的类)实现回调函数的方法,根据实现类的不同可以取得不同的弹窗的输出效果,避免构建抽象公共基类,并且能够满足弹窗的显示多样性需求,提升用户体验。

2、将弹窗封装成弹窗任务,由弹窗任务管理器对于弹窗对应的任务利用优先级的概念进行管理,方便对弹窗任务进行调度,能够实现复杂的显示逻辑,满足复杂的业务需求。

3、使得某些难以获取弹窗的实现类的实例的输出页面,能够方便地进行与弹窗有关的UI操作。

附图说明

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

图1是本发明实施例1提供的一种弹窗的输出方法流程图;

图2是本发明实施例1提供的输出页面显示弹窗的方法流程图;

图3是本发明实施例1提供的用于表示实现弹窗输出的有关类之间关系的类图;

图4是本发明实施例2提供的弹窗任务管理器的管理方法的流程图;

图5是本发明实施例3提供的一种弹窗输出装置示意图;

图6是本发明实施例4提供的计算机终端的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1:

一种弹窗的输出方法,如图1所示,所述方法包括:

S101.检测激活指令,

检测激活指令至少存在两种实现方式:

(1)由弹窗任务管理器提供接口供其它线程、函数或模块调用,从而激活所述弹窗任务管理器。

(2)所述弹窗任务管理器监听其它线程、函数或模块发出的通知消息,当监听到通知消息时,弹窗任务管理器被激活。

S102.若接收到所述激活指令,

S103.则判断弹窗任务管理器中是否存在弹窗任务。

S104.若是,则获取排在首位的弹窗任务,将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,由所述输出页面控制弹窗的输出,并将所述弹窗任务从所述弹窗任务管理器中删除;所述显示函数中包括用于对所述弹窗进行显示的回调函数。

具体地,获取排在首位的弹窗任务之后,还包括:

判断是否允许在当前运行环境输出所述弹窗任务对应的弹窗:

若是,则在所述弹窗任务中获取弹窗的输出页面的信息并根据所述信息将所述弹窗任务的显示函数的处置权通过事件总线和/或广播交由所述弹窗的输出页面,并将所述弹窗任务从所述弹窗任务管理器中删除;

若否,直接将所述弹窗任务从所述弹窗任务管理器中删除。

在输出页面获得显示函数的处置权后,由所述输出页面对所述弹窗进行输出,如图2所示,包括:

A1.根据所述输出页面的运行环境判断所述弹窗是否允许被输出:

B1.若是,则由所述弹窗任务中的显示函数调用回调函数输出所述弹窗;

C1.若否,不输出所述弹窗。

所述显示函数通过回调函数来实现弹窗的显示,因此所述显示函数本身并不具显示弹窗的功能,而仅仅是为弹窗的显示提供了抽象的公共接口。在JAVA和C#中,可以通过接口(interface)来表示显示函数,而在C++中,可以通过抽象类(abstract class)来表示显示函数。

回调函数是通过函数指针调用的函数。本实施例中,回调函数的指针(地址)作为参数传递给了显示函数,这个指针被用来调用其所指向的函数(进行弹窗显示的具体函数)。

本实施例中使用回调函数的目的在于,能够让不同的弹窗类实现所述回调函数,从而保证了弹窗的实现类的多样性。所述弹窗类包括但不限于原生的弹窗类、构造的视图类和/或构造的窗口类。所述弹窗类的显示效果包括显示覆盖在全屏页面上的浮层,提示框和控件等。

其中,原生的弹窗类包括但不限于Dialog、AlertDialog和DialogFragment,构造的视图类包括但不限于View,构造的窗口类包括但不限于PopupWindow,其中构造的视图类和构造的窗口类都能根据具体的业务进行定制。

具体地,Dialog为Android中常用的弹窗类,大多数场景下的弹窗都可以用该类及其子类来显示弹窗;DialogFragment是Android3.0后引入的Fragment框架中,由Fragment实现传统Dialog的效果,可以使得Dialog拥有生命周期的概念,方便管理;View为视图类,一个视图在屏幕上占据了一个矩形区域,在所述矩形区域中由View负责图形的绘制和事件的处理。

JAVA和C#均不支持多继承,而弹窗类的类型又具有多样性,因此难以使用抽象基类的思想来统一对弹窗进行管理,而不同的弹窗类对于弹窗的显示效果不同。本实施例中通过显示函数为弹窗的不同类型的显示方法提供相同的框架,满足弹窗的输出方式的多样性需求,提升用户体验。

本实施例中通过弹窗任务记录与弹窗有关的信息,所述弹窗任务包括弹窗标识、所述弹窗的显示函数、弹窗的优先级和弹窗的输出页面的信息。具体地,所述弹窗任务可以由类(class)或者结构体(struct)表示。所述弹窗任务管理器按照弹窗的优先级从高到低的顺序对弹窗所在的弹窗任务进行排序。

弹窗任务管理器能够维护一个或多个弹窗任务队列,所述弹窗任务管理器被激活之后,对弹窗任务管理器中的弹窗任务进行调度。具体地,所述弹窗任务管理器能够由类(class)或者结构体(struct)表示。

对于本实施例的方法,举例说明如下:

弹窗的显示需求为:按照A模块的业务需求以Dialog模式在B页面显示A模块需要显示的弹窗;

弹窗的设置及输出方法为:

构建Dialog类,并由A模块设定弹窗;

由Dialog类实现显示函数(onShow),并根据所述弹窗实现回调函数,具体地,所述显示函数设置于DialogListener接口;

构建所述弹窗对应的弹窗任务,所述弹窗任务由自定义的DialogTask类表示,DialogTask类包括所述弹窗标识(tag)、所述显示函数(onShow)、所述弹窗的优先级priority(所述优先级由A设定)和B页面的信息(所述信息由A输入);

将所述DialogTask类添加至弹窗任务管理器,弹窗任务管理器由自定义的DialogManager类实现,DialogManager类根据优先级把DialogTask类添加到任务对列里。

当任务对列被激活时,取出DialogTask,并把其中的显示函数onShow通过事件总线(EventBus)或者广播(Broadcast)传递至B页面,B页面即可获得弹窗的实现类(Dialog类)的实例;B页面把自己的Context(弹窗信息绘制所需的上下文)作为显示函数onShow的参数,由所述显示函数onShow调用回调函数完成弹窗的显示。

具体地,上述方法中涉及的类的关系如图3所示,此外,根据弹窗的显示方式的不同,弹窗的显示类还可以是DialogFragment类、View类或者其他类,事件总线(EventBus)和广播(Broadcast)均可以由包(package)提供,而事件总线(EventBus)和广播(Broadcast)的实现均依赖于Activity和/或Fragment。

可见,本实施例提供的弹窗输出方法只需要实现显示函数、回调函数和弹窗任务,并把弹窗任务添加到弹窗任务管理器中,即可由弹窗任务管理器来决定何时执行弹窗任务,减少人为的控制。

本实施例提供了一种弹窗的输出方法,能够为关于弹窗的不同的显示需求提供相同的解决框架,满足弹窗的输出方式的多样性需求,提升用户体验。同时,通过弹窗任务管理器将显示函数传输至弹窗的输出页面,能够使得原本难以获得弹窗的实现类的实例的输出页面,能够方便地进行与弹窗有关的UI操作。

实施例2:

一种弹窗的输出方法,所述方法包括:

S201.检测激活指令,若接收到所述激活指令,则判断弹窗任务管理器中是否存在弹窗任务。

S202.若是,则获取排在首位的弹窗任务,将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,由所述输出页面控制弹窗的输出,并将所述弹窗任务从所述弹窗任务管理器中删除;所述显示函数中包括用于对所述弹窗进行显示的回调函数。

具体地,所述弹窗任务管理器的管理方法如图4所示,包括:

A2.按照弹窗的优先级由高到低的顺序对弹窗对应的弹窗任务进行排序。

B2.检测激活指令,若接收到所述激活指令,则判断所述弹窗任务管理器中是否存在弹窗任务。

C2.若是,则获取排在首位的弹窗任务,判断是否允许在当前运行环境输出所述弹窗任务对应的弹窗。

具体地,可以通过在弹窗任务管理器中添加标志位表征当前运行环境来实现本步骤的功能。标志位为0表示当前运行环境不允许输出任何弹窗,否则,允许输出。

D2.若是,则将所述弹窗任务中的显示函数的处置权交由弹窗的显示页面,并将所述弹窗任务从所述弹窗任务管理器中删除。

E2.若否,直接将所述弹窗任务从所述弹窗任务管理器中删除。

在输出页面获得显示函数的处置权后,由所述输出页面对所述弹窗进行输出,包括:

根据所述输出页面的运行环境判断所述弹窗是否允许被输出:

若是,则由所述弹窗任务中的显示函数调用回调函数输出所述弹窗;

若否,不输出所述弹窗。

在页面中对是否允许输出弹窗进行检测,能够避免输出弹窗所可能引发的异常。其中,最常见的能够被本实施例中提供的方法规避的异常包括illegalArgumentException和BadTokenException。

illegalArgumentException通常为弹窗显示或者消失时,因页面上下文对应的Activity或Fragment实例不存在导致的异常。

BadTokenException通常为弹窗显示或者消失时,因页面上下文对应的Activity或Fragment实例不在运行状态抛出的异常。

此外,将所述弹窗任务的显示函数的处置权交由弹窗的显示页面后,页面获取了弹窗的实现类的实例,可以由弹窗的实现类对用户关于弹窗的操作进行监控和响应,而不同的实现类对于用户操作的响应方法和响应效果也可能不同,因此,能够进一步地保证对于弹窗的响应效果的多样性,提升用户体验。

具体地,若所述弹窗被关闭,则向弹窗任务管理器发送用于表示所述弹窗被关闭的通知消息。弹窗任务管理器获得所述通知消息,则根据所述通知消息判断是否需要再次进入激活状态。若不进入激活状态,则继续等待激活指令,若进入激活状态,则重复步骤S201。

判断是否需要再次进入激活状态可以有多种实现方式,比如,可以在具体的弹窗任务中通过加入用于表示是否在弹窗被关闭后激活弹窗任务管理器的参数来实现,若所述参数表示不激活,则在所述弹窗任务对应的弹窗被关闭后,通知消息中携带所述参数,则弹窗任务管理器获取所述关闭消息后不进入激活状态。

通过获取所述通知消息,能够对所述弹窗任务管理器进行循环激活,这种激活方式能够实现复杂的弹窗显示逻辑,实现较好的显示效果,比如:

(1)避免多个弹窗同时输出产生显示冲突;

(2)实现各个弹窗依次输出的效果;

(3)通过设定弹窗任务中的优先级并且结合弹窗任务管理器对通知消息的检测与处理,实现对弹窗消息的输出时机的有效控制。

本实施例提供了另一种弹窗的输出方法,能够进一步地保证对于弹窗的响应效果的多样性,提升用户体验,并且减少由于显示弹窗而造成的异常;此外,本实施例提供了实现弹窗输出的框架,在这种框架下,通过对弹窗任务中的参数进行设计并根据具体弹窗的相关业务对所述参数进行赋值,即可实现对弹窗输出时机的控制。

实施例3:

一种弹窗输出装置,如图5所示,包括:

激活指令检测模块301,用于检测激活指令;

判断模块302,用于判断弹窗任务管理器中是否存在弹窗任务;

弹窗任务处置模块303,用于获取排在首位的弹窗任务,将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,并将所述弹窗任务从所述弹窗任务管理器中删除;

页面输出模块304,用于所述输出页面控制弹窗的输出;

弹窗任务管理器305,用于对弹窗任务进行管理。所述弹窗任务中包括弹窗的显示函数和弹窗的优先级,所述弹窗任务管理器按照弹窗的优先级从高到低的顺序对弹窗所在的弹窗任务进行排序。

所述弹窗任务管理器305还包括:

弹窗判断第一子模块3051,用于判断是否允许在当前运行环境输出所述弹窗任务对应的弹窗:

若是,则由弹窗任务处置模块303将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,并将所述弹窗任务从所述弹窗任务管理器305中删除;若否,则由弹窗任务处置模块303直接将所述弹窗任务从所述弹窗任务管理器中删除。

所述弹窗任务处置模块303还包括:

页面信息获取子模块3031,用于在所述弹窗任务中获取弹窗的输出页面的信息;

处置权转移子模块3032,用于根据所述信息,将所述弹窗任务的显示函数的处置权交由所述弹窗的输出页面。

所述页面输出模块304包括:

弹窗判断第二子模块3041,用于根据所述输出页面的运行环境判断所述弹窗是否允许被输出;

显示子模块3042,用于在所述输出页面由显示函数调用回调函数对所述弹窗进行显示。

通知子模块3043,用于若所述弹窗被关闭,则向弹窗任务管理器发送用于表示所述弹窗被关闭的通知消息。

本实施例基于与实施例1和实施例2同样地发明构思,提供了一种弹窗输出装置,本实施例能够用于实现上述实施例中提供的弹窗输出方法。

实施例4:

本发明的实施例还提供一种弹窗输出终端,所述终端包括弹窗输出装置。该终端可以是移动终端等终端设备。可选地,在本实施例中,该终端也可以是计算机终端,还可以替换为计算机终端群中的任意一个计算机终端设备。

可选地,在本实施例中,上述计算机终端或移动终端可以位于计算机网络的多个网络设备中的至少一个网络设备。

可选地,图6是根据本发明实施例的终端的结构框图。如图6所示,该终端可以包括:一个或多个(图中仅示出一个)处理器、存储器、以及传输装置。

其中,存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端或移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述的传输装置用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置包括一个网络适配器,其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置为射频模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器用于存储用于进行弹窗输出的数据、代码以及应用程序。

处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:

可选的,上述处理器还可以执行如下步骤的程序代码:

第一步,检测激活指令,若接收到所述激活指令,则判断弹窗任务管理器中是否存在弹窗任务:

第二步,若是,则获取排在首位的弹窗任务,将所述弹窗任务中的显示函数的处置权交由弹窗的输出页面,由所述输出页面控制弹窗的输出,并将所述弹窗任务从所述弹窗任务管理器中删除;所述显示函数中包括用于对所述弹窗进行显示的回调函数。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台移动终端或计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

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

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

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

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

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