本发明实施例涉及移动互联网领域,更具体地,涉及一种在线推送消息的处理方法及装置。
背景技术:
无论是在安卓生态环境下还是在ios生态环境下,推送技术因其及时性和准确性而被广泛采用,对于一些实时传媒类或视频类应用(application,app),具备高效的推送消息接收能力显得至关重要。在推送过程中,服务端(推送服务器)发出推送消息,客户端(app)负责接收和处理(消费)推送消息,推送消息的一般分为三种类型:在线推送消息、离线推送消息以及透传消息。推送是否高效和及时,很大程度取决于客户端在接收到推送服务器发送的推送消息后,对推送消息的处理是否高效和及时。随着直播行业的快速发展,任何一款直播类app都希望提高其app的活跃度,然而用户不可能将app长时间挂在前台运行。因此,app在前台运行期间,为了保证用户及时收到推送消息,app对在线推送消息必须具备高效的接收与消费能力。
目前,在安卓平台上,app对在线推送消息的处理主要采用先弹通知再路由消息的处理方式。具体处理过程为:app的第一进程负责接收在线推送消息,并创建通知,当通知被点击后,在线推送消息以广播的方式路由到app的第二进程,再由第二进程负责在线推送消息的消费。其中,第一进程可以为后台进程,第二进程可以为主进程。
但是,app的后台进程采用广播方式向主进程传递在线推送消息时,由于安卓系统不同版本对广播的限制,有些广播会被拦截,造成部分在线推送消息无法被后台进程路由至主进程。也就是在上述处理方式中,在线推送消息在后台进程和主进程之间传递时存在消息丢失的问题,进而导致在线推送消息推送失败。
技术实现要素:
本发明实施例提供了一种克服上述问题或者至少部分地解决上述问题的一种在线推送消息的处理方法及装置。
一方面本发明实施例提供了一种在线推送消息的处理方法,所述方法包括:
s1,将第一进程接收到的在线推送消息写入sqlite数据库,并获得对应于所述在线推送消息的查询句柄;
s2,将所述查询句柄从所述第一进程传递至第二进程;
s3,基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并对所述在线推送消息进行处理。
其中,在步骤s1之前还包括:
将所述第一进程中的推送服务的服务优先级设置为最高等级。
其中,步骤s2具体包括:
若判断获知所述第二进程处于前台,基于所述在线推送消息创建第一通知,所述第一通知内部封装有所述查询句柄;
当所述第一通知被点击时,将所述查询句柄从所述第一进程传递至第二进程。
其中,步骤s2具体包括:
若判断获知所述第二进程处于后台,创建包含有所述查询句柄的消息intent;
利用所述消息intent启动所述第二进程中的activity组件;
利用所述第二进程中的activity组件从所述消息intent中提取所述查询句柄。
其中,步骤s3具体包括:
基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并将所述在线推送消息发送至所述第二进程中的ui线程,以完成对所述在线推送消息的处理。
其中,步骤s3中对所述在线推送消息进行处理,进一步包括:
若判断获知所述第二进程处于前台,利用所述ui线程解析所述在线推送消息,完成对所述在线推送消息的处理。
其中,步骤s3中对所述在线推送消息进行处理,进一步包括:
若判断获知所述第二进程处于后台,利用所述ui线程创建第二通知,当所述第二通知被点击时,利用所述ui线程解析所述在线推送消息,完成对所述在线推送消息的处理。
另一方面本发明实施例提供了一种在线推送消息的处理装置,所述装置包括:
写入模块,用于将第一进程接收到的在线推送消息写入sqlite数据库,并获得对应于所述在线推送消息的查询句柄;
传递模块,用于将所述查询句柄从所述第一进程传递至第二进程;
处理模块,基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并对所述在线推送消息进行处理。
又一方面,本发明提供了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述的处理方法。
又一方面,本发明提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述的处理方法。
本发明实施例提供的一种在线推送消息的处理方法及装置,通过将在线推送消息写入sqlite数据库,采用查询句柄替代在线推送消息在后台进程和主进程之间进行传递,主进程根据获得的查询句柄在sqlite数据库中查询到对应的在线推送消息后,再对在线推送消息进行解析和消费,从而完成对在线推送消息的处理。由于查询句柄在后台进程和主进程之间传递时不会丢失,避免了在线推送消息在后台进程和主进程之间进行传递时的消息丢失问题,提高了在线推送的成功率,使在线推送消息的推送更加高效和及时。
附图说明
图1为本发明实施例提供的一种在线推送消息的处理方法的流程图;
图2为本发明实施例提供的一种在线推送消息的处理装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在详细描述本发明实施例的方案之前,对以下名词进行解释,以便于更好的理解本发明实施例中的方案
推送(push):指通过一定的技术标准或协议,在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术。
socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,socket本质是编程接口(api),对tcp/ip的封装,tcp/ip也要提供可供程序员做网络开发所用的接口,这就是socket编程接口。
长连接(persistentconnection):指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
进程(process):指计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,进程也是程序的基础执行实体。
主进程(mainprocess):指与用户正在进行直接交互,前台可见的进程,其优先级较高,不易被杀死。
后台进程(backgroundprocess,b-process):指长期静默运行在用户进程之后且用户无法直接交互的进程,其优先级较低,容易被杀死;
线程(thread):有时被称为轻量级进程(lightweightprocess,lwp),是程序执行流的最小单元。一个标准的线程由线程id,当前指令指针(pc),寄存器集合和堆栈组成。
主线程(mainthread):也叫做ui线程,指安卓系统中应用运行时的主线程,这个主线程负责向ui组件分发事件(包括绘制事件),该线程不能进行耗时操作(网络请求、数据库操作),否则容易引发anr异常。
服务(service):安卓系统的四大组件之一,服务是不予用户直接交互的系统组件,它长期运行在后台,例如音乐播放器播放音乐就是在service中进行。
意图服务(intentservice):服务的一种特殊类型,意图服务通常用来做耗时操作,其内部维持有一个线程池,且服务本在执行完耗时操作后会自动停止服务。
intent:不仅可用于应用程序之间,也可用于应用程序内部的activity组件和service组件之间的交互,可以将intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。
handler:主要接受子线程发送的数据,并用此数据配合主线程更新ui。
在线推送(onlinepush,on-push):指在应用进程处于活动状态时,应用后台推送服务进程与推送服务器维持长连接过程中受到的消息。
通知(notification):安卓系统的一种消息展示类型,通常会在顶部通知栏以一个面板形式进行展示,带有标题和关键词内容。
在线通知(onlinenotiiaction,on-notification):通知的一种类型,该类型通知由应用自身创建并展示。
activity组件:安卓系统的四大组件之一,是与用户直接交互的基本组件单元,可实现进程内或跨进程间的数据通讯。
广播(broadcast):安卓系统的四大组件之一,广播通常用来进行应用进程内部线程间的通讯,或不同进程间的通讯。
contentprovider组件:安卓系统的四大组件之一,一般用于跨进程间的数据传递。
图1为本发明实施例提供的一种在线推送消息的处理方法,如图1所示,所述方法包括:s1,将第一进程接收到的在线推送消息写入sqlite数据库,并获得对应于所述在线推送消息的查询句柄;s2,将所述查询句柄从所述第一进程传递至第二进程;s3,基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并对所述在线推送消息进行处理。
其中,所述第一进程可以为后台进程,作为推送服务进程(pushprocess),负责接收和路由来自推送服务器的消息。所述第二进程可以为主进程(mainprocess)负责消息的处理。
具体地,后台进程开启推送服务(pushservice),接收推送服务器推送的在线推送消息。后台进程接收到在线推送消息后,将在线推送消息转换为json(javascriptobjectnotation,js对象标记)格式,再利用sqlitehepler将在线推送消息写入sqlite数据库中,同时后台进程获得sqlitehepler反馈的对应于在线推送消息的查询句柄。为保证在线推送消息的高效性和新鲜性,将所述sqlite数据库存放在应用的cache目录下,清除cache目录后sqlite数据库也会做清空处理。后台进程将查询句柄传递至主进程,主进程根据查询句柄查询得到对应的在线推送消息。主进程将对接收到的在线推送消息进行解析和消费,以完成对在线推送消息的处理。
本发明实施例提供的一种安卓系统中在线推送消息的处理方法,通过将在线推送消息写入sqlite数据库,采用查询句柄替代在线推送消息在后台进程和主进程之间进行传递,主进程根据获得的查询句柄在sqlite数据库中查询到对应的在线推送消息后,再对在线推送消息进行解析和消费,从而完成对在线推送消息的处理。由于查询句柄在后台进程和主进程之间传递时不会丢失,避免了在线推送消息直接在后台进程和主进程之间进行传递时的消息丢失问题,提高了在线推送的成功率,使在线推送消息的推送更加高效和及时。
在上述实施例中,在步骤s1之前还包括:
将所述第一进程中的推送服务的服务优先级设置为最高等级。
具体地,推送服务长期运行在第一进程中,其服务优先级设置为最高等级,同时,推送服务使用socket通讯手段与推送服务器建立长连接,且第一进程在应用初始化时优先开启推送服务,以保证推送服务器消息送达的及时性。
在上述实施例中,步骤s2具体包括:
若判断获知所述第二进程处于前台,基于所述在线推送消息创建第一通知,且所述第一通知内部封装有所述查询句柄;
当所述第一通知被点击时,将所述查询句柄从所述第一进程传递至第二进程。
具体地,第一进程在完成将在线推送消息写入sqlite数据库后,对第二进程是否处于前台进行判断,第二进程处于前台表示第二进程对应app的界面在终端上可见。若由所述第一进程判断获知所述第二进程处于前台,则所述第一进程根据在线推送消息的标题和内容创建第一通知,并将查询句柄封装在所述第一通知内部,最后在通知栏展示所述第一通知。当用户点击所述第一通知时,所述第二进程获取所述第一通知内部的查询句柄,并将所述查询句柄保存至应用级别的内存中。
在上述实施例中,步骤s2具体包括:
若判断获知所述第二进程处于后台,创建包含有所述查询句柄的消息intent;
利用所述消息intent启动所述第二进程中的activity组件;
利用所述第二进程中的activity组件从所述消息intent中提取所述查询句柄。
具体地,第一进程在完成将在线推送消息写入sql数据库后,对第二进程是否处于前台进行判断。若由所述第一进程判断获知所述第二程处于后台,则所述第二进程创建一个消息intent,且所述消息intent中包含有所述查询句柄。所述第二进程通过所述消息intent启动所述第二进程中的透明activity组件,然后所述第二进程中的透明activity组件接收到所述消息intent,并提取所述消息intent中的查询句柄,所述第二进程将所述查询句柄保存至应用级别的内存中,最后所述第二进程中的透明activity组件在完成上述工作后迅速销毁。
在上述实施例中,步骤s3具体包括:
基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并将所述在线推送消息发送至所述第二进程中的ui线程,以完成对所述在线推送消息的处理。
具体地,当所述第二进程将所述查询句柄存储至所述应用级别内存后,所述第二进程开启一个意图服务。然后,所述意图服务根据所述查询句柄使用contentprovider组件查询cache目录下的对应的所述在线推送消息。最后,所述意图服务使用handler将所述在线推送消息发送至第二进程中的ui线程。所述ui线程成功接收到所述在线推送消息后,所述意图服务随即暂停运行,等待下一个在线推送消息到达。
在上述实施例中,步骤s3中对所述在线推送消息进行处理,进一步包括:
若判断获知所述第二进程处于前台,利用所述ui线程解析所述在线推送消息,完成对所述在线推送消息的处理。
具体地,当所述第二进程处于前台时,所述ui线程对接收到的在线推送消息直接进行解析并提取所述在线推送消息的有效字段,完成在线推送消息的处理。
在上述实施例中,步骤s3中对所述在线推送消息进行处理,进一步包括:
若判断获知所述第二进程处于后台,利用所述ui线程创建第二通知,当所述第二通知被点击时,利用所述ui线程解析所述在线推送消息,完成对所述在线推送消息的处理。
具体地,当所述第二进程处于后台时,所述ui根据接受到的在线推送消息的标题和内容创建第二通知,并在通知栏展示所述第二通知。当用户点击所述第二通知时,所述ui线程通过内部广播的形式解析所述在线推送消息,完成所述在线推送消息的处理。这一过程可以使所述第二进程从后台切换至前台,提高app的活跃率。
图2为本发明实施例提供的一种在线推送消息的处理装置的结构框图,如图2所示,所述装置包括:写入模块1、传递模块2以及处理模块3。其中:
所述写入模块1用于将第一进程接收到的在线推送消息写入sqlite数据库,并获得对应于所述在线推送消息的查询句柄。所述传递模块2,用于将所述查询句柄从所述第一进程传递至第二进程。所述处理模块3,基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并对所述在线推送消息进行处理。
其中,所述第一进程可以为后台进程,作为推送服务进程(pushprocess),负责接收和路由来自推送服务器的消息。所述第二进程可以为主进程(mainprocess)负责消息的处理。
具体地,后台进程开启推送服务(pushservice),接收推送服务器推送的在线推送消息。后台进程接收到在线推送消息后,将在线推送消息转换为json(javascriptobjectnotation,js对象标记)格式,再利用sqlitehepler将在线推送消息写入sqlite数据库中,同时后台进程获得sqlitehepler反馈的对应于在线推送消息的查询句柄。为保证在线推送消息的高效性和新鲜性,将所述sqlite数据库存放在应用的cache目录下,清除cache目录后sqlite数据库也会做清空处理。后台进程将查询句柄传递至主进程,主进程根据查询句柄查询得到对应的在线推送消息。主进程将对接收到的在线推送消息进行解析和消费,以完成对在线推送消息的处理。
本发明实施例提供的一种安卓系统中在线推送消息的处理装置,通过写入模块将在线推送消息写入sqlite数据库,传递模块采用查询句柄替代在线推送消息在后台进程和主进程之间进行传递,处理模块根据获得的查询句柄在sqlite数据库中查询到对应的在线推送消息后,再对在线推送消息进行解析和消费,从而完成对在线推送消息的处理。由于查询句柄在后台进程和主进程之间传递时不会丢失,避免了在线推送消息在后台进程和主进程之间进行传递时的消息丢失问题,提高了在线推送的成功率,使在线推送消息的推送更加高效和及时。
本发明实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:将第一进程接收到的在线推送消息写入sqlite数据库,并获得对应于所述在线推送消息的查询句柄;将所述查询句柄从所述第一进程传递至第二进程;基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并对所述在线推送消息进行处理。
本发明实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:将第一进程接收到的在线推送消息写入sqlite数据库,并获得对应于所述在线推送消息的查询句柄;将所述查询句柄从所述第一进程传递至第二进程;基于所述第二进程接收到的所述查询句柄,在所述sqlite数据库中获取所述在线推送消息,并对所述在线推送消息进行处理。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。