一种应用程序的自启动检测方法、装置及服务器与流程

文档序号:16530390发布日期:2019-01-05 10:42阅读:270来源:国知局
一种应用程序的自启动检测方法、装置及服务器与流程

本申请涉及通信技术领域,特别是涉及一种应用程序的自启动检测方法、一种应用程序的自启动检测装置和服务器。



背景技术:

在android应用市场上存在成千上万个应用程序,由于android系统本身的开放性,导致各种应用程序普遍存在自启动,抢占系统cpu资源,使得手机产生系统卡顿,耗电速度快,发热严重等现象。

目前有些厂商会在android系统层面上对应用程序自启动进行控制,如小米手机miui系统,采取技术手段通常是修改定制android系统代码实现;还有一些安全软件公司开发第三方优化工具,辅助用户清理应用进程,如奇虎360科技有限公司的360安全卫士,qq手机助手,猎豹清理大师等,大多采取技术手段是通过获取手机上所有安装的,正在运行的应用信息,关闭开机广播,网络变化广播接收器,获取root权限和清理后台独立守护进程等。通过这些应用外的手段,自启动现象得到一定程度缓解,但是没有从根源上解决特定应用程序自启动问题。

回到应用程序自身来说,如果不对自身的自启动进行检测和监控,将会占用大量cpu资源,提高耗电最快,成为手机系统上的杀手级应用。从而导致用户不得不卸掉应用程序,或者频繁充电,或者重启系统。这对应用程序的推广和成长是极其不利的。



技术实现要素:

鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种应用程序的自启动检测方法、一种应用程序的自启动检测装置和服务器。

为了解决上述问题,本申请实施例公开了一种应用程序的自启动检测方法,生成有代理接口对象;所述的方法包括:

所述代理接口对象获取所述应用程序提交的组件启动指令;

所述代理接口对象解析所述组件启动指令,并将解析得到的目标信息上传至服务器,所述服务器用于依据所述目标信息判定应用程序是否被自启动。

优选的,所述方法还包括:

当应用程序启动时,应用程序向系统活动管理服务模块ams发送组件启动指令;

所述代理接口对象获取所述应用程序提交的组件启动指令的步骤包括:

所述代理接口对象接收由所述系统活动管理服务模块ams发送的由所述应用程序提交的组件启动指令。

优选的,所述方法还包括:

所述系统活动管理服务模块ams在接收到所述应用程序提交的组件启动指令后,针对所述应用程序创建主线程activitythread;其中,所述主线程activitythread包括内部成员对象消息处理模块handler,所述消息处理模块handler包含原始回调函数callback;

所述代理接口对象代理所述原始回调函数callback,将所述组件启动指令分发到对应的系统组件,以完成组件的启动。

优选的,所述组件启动指令包括:界面activity组件启动指令;

所述代理接口对象解析所述组件启动指令,并将解析得到的目标信息上传至服务器的步骤包括:

所述代理接口对象确定界面activity组件启动指令对应的组件是否为首次启动;

若是,则所述代理接口对象解析所述界面activity组件启动指令,并将解析得到的第一目标信息上传至服务器。

优选的,所述组件启动指令还包括:服务service组件启动指令;

所述代理接口对象解析所述组件启动指令,并将解析得到的目标信息上传至服务器的步骤还包括:

所述代理接口对象确定服务service组件启动指令对应的组件是否为首次启动;

若是,则所述代理接口对象解析所述服务service组件启动指令,并将解析得到的第二目标信息上传至服务器。

优选的,所述组件启动指令还包括:广播接收器broadcastreceiver组件启动指令;

所述代理接口对象解析所述组件启动指令,并将解析得到的目标信息上传至服务器的步骤还包括:

所述代理接口对象确定广播接收器broadcastreceiver组件启动指令对应的组件是否为首次启动;

若是,则所述代理接口对象解析所述广播接收器broadcastreceiver组件启动指令,并将解析得到的第三目标信息上传至服务器。

优选的,所述解析得到的目标信息包括:组件类型信息、启动组件的传递参数intent对象详细信息、组件所在包名、组件类名、组件所运行进程名。

本申请实施例还公开了一种应用程序的自启动检测方法,所述应用程序生成代理接口对象;所述代理接口对象用于接收所述应用程序提交的组件启动指令,解析所述组件启动指令,并将解析得到的目标信息上传至服务器;

所述的方法包括:

所述服务器依据所述目标信息判定应用程序是否被自启动。

优选的,所述服务器依据所述目标信息判定应用程序是否被自启动的步骤包括:

所述服务器根据所述解析得到的目标信息,确定应用程序所在的主进程中第一个被启动的组件;

若所述主进程中第一个被启动的组件不是被应用程序声明在配置文件中的主入口activity,则确定应用程序为自启动。

优选的,所述服务器依据所述目标信息判定应用程序是否被自启动的步骤还包括:

若所述主进程中第一被启动的组件是被应用程序声明在配置文件中的主入口activity,则确定应用程序为正常启动;

优选的,当应用程序启动时,应用程序向系统活动管理服务模块ams发送组件启动指令;所述系统活动管理服务模块ams在接收到所述应用程序提交的组件启动指令后,针对所述应用程序创建主线程activitythread;所述主线程activitythread包括内部成员对象消息处理模块handler,所述消息处理模块handler包含原始回调函数callback;所述代理接口对象还用于代理所述原始回调函数callback,将所述组件启动指令分发到对应的系统组件,以完成组件的启动。

本申请实施例还公开了一种应用程序的自启动检测装置,所述的装置包括:应用程序模块,以及所述应用程序模块生成的代理接口对象模块;所述代理接口对象模块包括:

组件启动指令获取子模块,用于获取所述应用程序提交的组件启动指令;

解析上传子模块,用于解析所述组件启动指令,并将解析得到的目标信息上传至服务器,所述服务器用于依据所述目标信息判定应用程序是否被自启动。

本申请实施例还公开了一种服务器,所述服务器与代理接口对象通信;所述代理接口对象由应用程序生成,用于接收所述应用程序提交的组件启动指令,解析所述组件启动指令,并将解析得到的目标信息上传至预设服务器;

所述的服务器包括:

判断模块,用于依据所述目标信息判定应用程序是否被自启动。

本申请实施例包括以下优点:

在本申请实施例中,当应用程序启动时,生成用于代理android系统组件启动的必经路径上的activitythread的原始接口对象的代理接口对象。在应用程序的启动流程中,代理接口对象获取组件启动指令后,对组件启动指令进行解析,并将解析得到的目标信息上传至预设服务器。使得程序开发者可以根据服务器收集的目标信息来优化应用的自启动,以降低应用耗电和cpu占用,提升应用的稳定性,打造更好的用户体验。

附图说明

图1是android系统的应用程序启动流程;

图2是本申请实施例中的一种应用程序的自启动检测方法实施例的流程图;

图3是本申请的一种应用程序的自启动检测方法实施例1的步骤流程图;

图4是本申请的一种应用程序的自启动检测方法实施例2的步骤流程图;

图5是本申请的一种应用程序的自启动检测装置实施例的结构框图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

android应用程序正常启动是通过用户点击手机屏幕所安装程序图标触发的,其他情形全部属于应用自启动范畴,如应用开机自启动,收到广播或消息推送被唤起,被后台守护进程唤起等。

现有的自动启流程大多侧重通过系统底层,或者外部获取应用程序的运行信息,来禁止应用程序自启动。

参照图1为android系统的应用程序启动流程。当应用程序被启动时,应用程序向系统的ams(activitymanagerservice,活动管理服务模块)发送组件启动指令。ams是android中最核心的系统服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。

ams接收到组件启动指令后,为应用程序创建一个主线程activitythread。之后,activitythread创建一个全局应用application对象,application对象被正常执行。ams将组件启动指令发送给activitythread。activitythread根据ams发送的组件启动指令的调度,执行针对某个组件的操作。其中,所指的组件包括界面activity组件、服务service组件、广播接收器broadcastreceiver组件。

在activitythread接收到组件启动指令后,组件启动指令被存储到activitythread的消息队列中。然后由activitythread中的分发消息处理器将队列中的组件启动指令进行分发,组件启动指令被分发到对应的组件以完成组件的启动。根据android系统工作机制,一般应用程序的启动是通过组件的启动开始的。

参照图2是本申请实施例中的一种应用程序的自启动检测方法实施例的流程图。当应用程序被启动时,应用程序向系统的ams发送组件启动指令。ams接收到组件启动指令后,为应用程序创建一个主线程activitythread。之后,activitythread创建一个全局应用application对象,application对象被正常执行。ams将组件启动指令发送给activitythread。

当application对象被activitythread调用时,应用程序创建代理接口对象,并将代理接口对象注入activitythread,以代理activitythread中分发消息的原始接口对象。activitythread收到组件启动指令后,将组件启动指令交由代理接口对象。代理接口对象确定组件启动指令的类型,并判断组件指令对应的组件是否为首次启动。若是首次启动,代理接口对象解析组件启动指令,并将解析得到的目标信息上报预设服务器。同时,代理接口对象仍然执行原始接口对象的功能,将组件启动指令分发到对应的组件,以完成组件的启动。若组件指令对应的组件不是被首次启动,则代理接口对象,直接将组件启动指令分发到对应的组件,以完成组件的启动。

按照android系统机制,组件的启动必须经过activitythread处理。因此本申请实施例中,提出一种应用程序的自启动检测方法。当应用程序启动时,生成用于代理android系统组件启动的必经路径上的activitythread的原始接口对象的代理接口对象。在应用程序的启动流程中,代理接口对象获取组件启动指令后,对组件启动指令进行解析,并将解析得到的目标信息上传至预设服务器。使得程序开发者可以根据服务器收集的目标信息来优化应用的自启动,以降低应用耗电和cpu占用,提升应用的稳定性,打造更好的用户体验。

参照图3,示出了本申请的一种应用程序的自启动检测方法实施例1的步骤流程图。其中,所述应用程序生成有代理接口对象;所述代理接口对象用于代理原始接口对象;所述的方法具体可以包括如下步骤:

步骤101,所述代理接口对象获取所述应用程序提交的组件启动指令;

具体的,当应用程序被启动时,应用程序向系统的ams发送组件启动指令。ams接收到组件启动指令后,为应用程序创建一个主线程activitythread。之后,activitythread创建一个全局应用application对象,application对象被正常执行。ams将组件启动指令发送给activitythread。activitythread收到组件启动指令后,将组件启动指令交由代理接口对象。

代理接口对象是应用程序启动后,由应用程序创建。更准确而言,代理接口对象是在application对象被activitythread调用时,由应用程序创建,并注入activitythread,以代理activitythread中分发消息的原始接口对象。

在activitythread中,消息的分发通过内部的成员消息处理器handler来负责。handler包括内部的回调函数callback,消息处理器handler实际上是通过内部的回调函数callback来将消息分发到各个组件,以完成组件的启动。

在本申请实施例中,代理接口对象是指由应用程序生成的代理回调函数callback。原始接口对象是主线程activitythread的原始回调函数callback。通过代理回调函数callback来执行主线程activitythread的原始回调函数callback的消息分发功能。

在本申请实施例中,采用了动态代理方式,当应用程序启动的时候,应用程序动态生成代理接口对象。

在本申请实施例中,动态代理的过程为:在应用程序启动时,应用程序反射解析activitythread对象内部成员的handler下的原始回调函数callback。应用程序生成代理回调函数callback,并采用代理回调函数callback替换原始回调函数callback,从而由代理回调函数callback实现原始回调函数callback的功能。

步骤102,所述代理接口对象解析所述组件启动指令,并将解析得到的目标信息上传至预设服务器,所述服务器用于依据所述目标信息判定应用程序是否被自启动。

在本申请实施例中,代理接口对象除了可以实现原始函数的功能外,还具有解析启动组件,并将解析得到的目标信息上传至服务器的功能。

在本申请实施例中,组件启动指令包括:界面activity组件启动指令、服务service组件启动指令及广播接收器broadcastreceiver组件启动指令。

当组件启动指令为界面activity组件启动指令时,代理接口对象,确定界面activity组件启动指令对应的组件是否为首次启动;

若是首次启动,则代理接口对象解析界面activity组件启动指令,并将解析得到的第一目标信息上传至预设服务器。

当组件启动指令为服务service组件启动指令时,代理接口对象,确定服务service组件启动指令对应的组件是否为首次启动;

若是首次启动,则代理接口对象解析服务service组件启动指令,并将解析得到的第二目标信息上传至预设服务器。

当组件启动指令为广播接收器broadcastreceiver组件启动指令时,代理接口对象,确定广播接收器broadcastreceiver组件启动指令对应的组件是否为首次启动;

若是首次启动,则代理接口对象解析广播接收器broadcastreceiver组件启动指令,并将解析得到的第三目标信息上传至预设服务器。

在本申请实施例中,解析组件启动指令得到的目标信息可以包括如下5个信息:组件类型信息、启动组件的传递参数intent对象详细信息、组件所在包名、组件类名、组件所运行进程名。服务器根据目标信息可以确定应用程序是否自启动,以及引起自启动的组件对象。

服务器分析代理接口对象上报的目标信息,并确定应用程序的主进程中第一个被启动的组件是哪个。如果是被应用程序声明在配置文件androidmanifest中的主入口mainactivity,则本次启动为用户点击图标正常启动;如果是其他组件,包括非主入口activity,service,broadcastreceiver等组件,则属于应用程序自启动。进一步的,服务器可以根据子进程上的组件信息,更精确定位是哪个组件触发自启动。使得程序开发者可以根据服务器收集的目标信息来优化应用的自启动,以降低应用耗电和cpu占用,提升应用的稳定性,打造更好的用户体验。

参照图4,示出了本申请的一种应用程序的自启动检测方法实施例2的步骤流程图。其中,所述应用程序生成代理接口对象;所述代理接口对象用于接收所述应用程序提交的组件启动指令,解析所述组件启动指令,并将解析得到的目标信息上传至预设服务器;所述的方法具体可以包括如下步骤:

步骤201,所述服务器依据所述目标信息判定应用程序是否被自启动。

原始接口对象是主线程activitythread的原始回调函数callback;

当应用程序被启动时,应用程序向ams发送组件启动指令。ams接收到组件启动指令后,为应用程序创建一个主线程activitythread。之后,activitythread创建一个全局应用application对象,application对象被正常执行。ams将组件启动指令发送给activitythread。activitythread收到组件启动指令后,将组件启动指令交由代理接口对象。代理接口对象确定组件启动指令的类型,并判断组件指令对应的组件是否被首次启动。若是首次启动,代理接口对象解析组件启动指令,并将解析得到的目标信息上报预设服务器。

代理接口对象是应用程序启动后,由应用程序生成的。更准确而言,代理接口对象是在application对象被activitythread调用时,由应用程序创建,并注入activitythread,以代理activitythread中分发消息的原始接口对象。

代理接口对象上报的目标信息可以包括:组件类型信息、启动组件的传递参数intent对象详细信息、组件所在包名、组件类名、组件所运行进程名。

具体的,所述服务器根据所述解析得到的目标信息,确定应用程序所在的主进程中第一个被启动的组件;

若所述主进程中第一个被启动的组件不是被应用程序声明在配置文件中的主入口activity,则确定应用程序为自启动。

若所述主进程中第一被启动的组件是被应用程序声明在配置文件中的主入口activity,则确定应用程序为正常启动;

在android系统中,每个应用程序都有一个主进程,应用程序绝大部分逻辑运行在此进程上,主进程名为应用程序的包名。通过代理接口对象上报的五类信息,即可知道主进程中第一个被启动的组件是哪个。

应用程序除了存在一个主进程,还可能存在多个子进程。子进程通常是做一些后台耗时任务,或者消息推送使用。主进程与子进程的通信交互实际是通过activity/service/broadcastreceiver等系统组件完成,这些组件运行在在哪个进程实际是由配置文件androidmanifest中组件配置信息决定的。

子进程组件信息与主进程类似,也是上述五类信息。自启动往往是子进程通过某个组件的运行,唤起了主进程中定义的某个组件。通过上报每个进程中第一个启动的组件信息,可以直接找到哪个子进程中的哪个组件触发自启动。

服务器可以根据代理接口对象上报的目标信息,确定应用程式是否被自启动。应用程序自启动的源头,自启动频率,以及严重程度,进而控制和优化应用程序,提升用户体验,

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。

参照图5,示出了本申请的一种应用程序的自启动检测装置实施例的结构框图,具体可以包括如下模块:应用程序模块31,以及所述应用程序模块生成的代理接口对象模块32;所述代理接口对象模块32可以包括:

组件启动指令获取子模块321,用于获取所述应用程序提交的组件启动指令;

解析上传子模块322,用于解析所述组件启动指令,并将解析得到的目标信息上传至预设服务器,所述服务器用于依据所述目标信息判定应用程序是否被自启动。

在本申请实施例中,所述应用程序模块31还可以包括:

组件启动指令发送子模块,用于当应用程序启动时,向系统活动管理服务模块ams发送组件启动指令;

所述组件启动指令获取子模块包括:

组件启动指令接收单元,用于接收由所述系统活动管理服务模块ams发送的由所述应用程序提交的组件启动指令。

在本申请实施例中,所述装置还可以包括:系统活动管理服务模块ams;所述系统活动管理服务模块ams包括:

主线程建立子模块,用于在接收到所述应用程序提交的组件启动指令后,针对所述应用程序创建主线程activitythread;其中,所述主线程activitythread包括内部成员对象消息处理模块handler,所述消息处理模块handler包含原始回调函数callback;

所述代理接口对象模块还包括:

代理分发子模块,用于代理所述原始回调函数callback,将所述组件启动指令分发到对应的系统组件,以完成组件的启动。

在本申请实施例中,所述组件启动指令包括:界面activity组件启动指令;

所述解析上传子模块322可以包括:

第一启动确定单元,用于确定界面activity组件启动指令对应的组件是否为首次启动;

第一解析上传单元,用于若界面activity组件启动指令对应的组件为首次启动,则解析所述界面activity组件启动指令,并将解析得到的第一目标信息上传至预设服务器。

在本申请实施例中,所述组件启动指令还包括:服务service组件启动指令;

所述解析上传子模块322还可以包括:

第二启动确定单元,用于确定服务service组件启动指令对应的组件是否为首次启动;

第二解析上传单元,用于若服务service组件启动指令对应的组件为首次启动,则解析所述服务service组件启动指令,并将解析得到的第二目标信息上传至预设服务器。

在本申请实施例中,所述组件启动指令还包括:广播接收器broadcastreceiver组件启动指令;

所述解析上传子模块322还可以包括:

第三启动确定单元,用于确定广播接收器broadcastreceiver组件启动指令对应的组件是否为首次启动;

第三解析上传单元,用于若广播接收器broadcastreceiver组件启动指令对应的组件为首次启动,则解析所述广播接收器broadcastreceiver组件启动指令,并将解析得到的第三目标信息上传至预设服务器。

在本申请实施例中,所述解析得到的目标信息包括:组件类型信息、启动组件的传递参数intent对象详细信息、组件所在包名、组件类名、组件所运行进程名。

本申请实施例还公开了一种服务器,其中,所述服务器与代理接口对象通信;所述代理接口对象由应用程序生成,用于接收所述应用程序提交的组件启动指令,解析所述组件启动指令,并将解析得到的目标信息上传至预设服务器;

所述的服务器包括:

判断模块,用于依据所述目标信息判定应用程序是否被自启动。

在本申请实施例中,所述判断模块可以包括:

主进程组件确定子模块,用于根据所述解析得到的目标信息,确定应用程序所在的主进程中第一个被启动的组件;

自启动确定子模块,用于若所述主进程中第一个被启动的组件不是被应用程序声明在配置文件中的主入口activity,则确定应用程序为自启动。

在本申请实施例中,所述判断模块还可以包括:

正常启动确定子模块,用于若所述主进程中第一被启动的组件是被应用程序声明在配置文件中的主入口activity,则确定应用程序为正常启动;

在本申请实施例中,当应用程序启动时,应用程序向系统活动管理服务模块ams发送组件启动指令;所述系统活动管理服务模块ams在接收到所述应用程序提交的组件启动指令后,针对所述应用程序创建主线程activitythread;所述主线程activitythread包括内部成员对象消息处理模块handler,所述消息处理模块handler包含原始回调函数callback;所述代理接口对象还用于代理所述原始回调函数callback,将所述组件启动指令分发到对应的系统组件,以完成组件的启动。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本申请所提供的一种应用程序的自启动检测方法、一种应用程序的自启动检测装置和服务器,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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