CN114371973A - 一种埋点数据采集方法、装置、设备及存储介质 - Google Patents
一种埋点数据采集方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114371973A CN114371973A CN202111525576.6A CN202111525576A CN114371973A CN 114371973 A CN114371973 A CN 114371973A CN 202111525576 A CN202111525576 A CN 202111525576A CN 114371973 A CN114371973 A CN 114371973A
- Authority
- CN
- China
- Prior art keywords
- data
- monitoring service
- target data
- service
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
Abstract
本申请实施例公开了一种埋点数据采集方法、装置、设备及存储介质,该方法包括:在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager;由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,系统监控服务通过ServiceManager,建立与本地监控服务的连接;SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务;本地监控服务通过建立的连接将目标数据传递给系统监控服务。本申请提供的技术方案通过本地监控服务和系统监控服务即可以实现对目标数据的获取,无需人工对用户行为的每一个事件对应位置分别写入埋点代码,避免了错埋和漏埋的现象。
Description
技术领域
本申请实施例涉及通信技术领域,特别涉及一种埋点数据采集方法、装置设备及存储介质。
背景技术
随着互联网技术的迅速发展,应用程序的使用也越来越普及,用户应用程序的使用数据也变得越来越重要。目前,主要采用埋点方法获取用户应用程序使用数据,对埋点数据进行分析,根据分析结果不断推动产品优化,提高用户体验感。然而现有的埋点方法常常采用人工代码埋点方式,即对用户行为的每一个事件对应位置分别写入埋点代码,这种人工埋点的方式容易存在漏埋和错埋,且代码复用率低,工作量大,开发周期长,不利用应用程序的优化。
发明内容
本申请实施例提供了一种埋点数据采集方法、装置、设备及存储介质,可以实现通过对Android系统的服务进行监控的方式获取到埋点数据。技术方案如下:
一方面,本申请实施例提供一种埋点数据采集方法,应用于Android系统,所述方法包括:
在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager;
由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接;
SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务;
所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
另一方面,本申请实施例提供一种埋点数据采集装置,应用于Android系统所述装置包括:
本地监控创建模块,用于在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager;
系统连接建立模块,用于由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接;
第一数据传递模块,用于SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务;
第二数据传递模块,用于所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
再一方面,本申请实施例提供一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述方面所述的方法。
又一方面,本申请实施例提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述方面所述的方法。
又一方面,本申请实施例提供一种计算机程序产品,当该计算机程序产品被执行时,其用于执行上述方面所述的方法。
本申请实施例提供的技术方案中,在SystemServer启动过程中,创建本地监控服务,并将该本地监控服务注册到ServiceManager中,当ActivityManagerService启动系统监控服务的应用进程时,系统监控服务可以通过ServiceManager获取到本地监控服务的Binder对象,从而与本地监控服务建立连接。在SystemServer启动过程中会启动一系列服务,在一系列服务预先选定目标服务,并设置目标服务监听数据中的目标数据,使得目标服务在监听到目标数据后,将目标数据传递给本地监控服务。进一步地,本地监控服务通过建立的连接将目标数据传递给系统监控服务,系统监控服务在接收到目标数据后,对目标数据进行分析处理。在本申请实施例中允许用户自行进行目标服务和目标数据的选择,其中选择目标服务和目标数据的过程即对Android系统进行埋点的过程,可以实现对系统的全局埋点,并利用本地监控服务和系统监控服务即可以获取Android系统中目标数据,从而无需人工对用户行为的每一个事件对应位置分别写入埋点代码,避免了错埋和漏埋的现象,并且代码复用率高,工作量小,开发周期短,有利用应用程序的优化。
附图说明
图1是本申请一个实施例提供的埋点数据采集方法的流程图一;
图2是本申请一个实施例提供的埋点数据采集方法的局部时序图一;
图3是本申请一个实施例提供的埋点数据采集方法的局部时序图二;
图4是本申请一个实施例提供的埋点数据采集方法的局部时序图三;
图5是本申请一个实施例提供的埋点数据采集方法的局部时序图四;
图6是本申请一个实施例提供的埋点数据采集方法的局部时序图五;
图7是本申请一个实施例提供的埋点数据采集方法的局部时序图六;
图8是本申请一个实施例提供的埋点数据采集方法的局部时序图七;
图9是本申请一个实施例提供的埋点数据采集方法的局部时序图八;
图10是本申请一个实施例提供的埋点数据采集方法的整体系统框图;
图11是本申请一个实施例提供的埋点数据采集方法的局部系统框图;
图12是本申请一个实施例提供的埋点数据采集装置的框图;
图13是本申请一个实施例提供的计算机设备的结构框图。
具体实施方式
下面将结合附图对本申请实施方式作进一步地详细描述。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
请参考图1,其示出了本申请一个实施例提供的埋点数据采集方法的流程图。该方法应用于Android系统中,该方法可以包括如下几个步骤:
步骤101,在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager。
在一实施例中,SystemServer是Android系统的核心之一,是Android系统运行的最基本需求,大部分Android提供的服务都运行在这个进程里。ServiceManager系统服务管理者,其功能是查询和注册服务。在本实施例中,在SystemServer启动过程中,创建本地监控服务即LocalMonitorService,并且将服务添加到系统的ServiceManager中,供外部服务使用。具体的,在SystemServer启动过程中,会启动各种服务,主要分为3大方法,即startBootstrapServices(),startCoreServices()和startOtherServices(),LocalMonitorService是由SystemServer在startOtherServices()时创建的。
步骤102,由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接。
在一实施例中,ActivityManagerService是Android系统应用程序管理服务,用于采集应用启动信息数据,是Activity的最终管理者。ActivityManagerService在SystemServer进程中启动,SystemServer的main()会调用startBootstrapServices()启动ActivityManagerService。系统监控服务即SystemMonitorService是由ActivityManagerService启动的应用进程,启动后SystemMonitorService通过ServiceManager获取到LocalMonitorService的Binder对象,并与LocalMonitorService建立连接。
具体的,如图2所示,在SystemServer在监听到Start()后,调用startOtherService(),创建LocalMonitorService,LocalMonitorService创建后,利用addService(String LOCAL_MONITOR,IBinder this)指令在ServiceManager注册服务,SystemMonitorService监听到onCreate()后,启动SystemMonitorService,利用addService(String LOCAL_MONITOR)指令向ServiceManager获取到LocalMonitorService的Binder对象,并利用registerListener(this)指令建立与LocalMonitorService的连接。
在一种可能的实现方式中,在所述系统监控服务监听到退出时,断开所述本地监控服务和所述系统监控服务间的连接。具体的退出指令调用onDestory()(如图2所示),当SystemMonitorService监听到onDestory()后,利用unregisterListener(this)指令断开与LocalMonitorService的连接。
步骤103,SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务。
在一实施例中,SystemServer启动过程中会启动60多种服务,用户可以预先选定目标服务,因目标服务监听到的数据并不是全部都需要进行后续分析处理,因此在目标服务监听到的数据中进行选取,选取出目标数据。具体的,目标服务的数量可以为多种,并为每一个目标服务选定目标数据。从而使得在目标服务监听到任一目标数据后,即将该目标数据传递给本地监控服务。
具体的,目标服务包括ActivityManagerService、WindowManagerService、AccessibilityManagerService、AudioService中的至少一种。ActivityManagerService用于采集应用启动信息数据,因此当ActivityManagerService为目标服务时,目标数据包括应用启动数据、Activity拉起数据、Service创建数据,Activity显示数据和应用退出数据中的至少一种。WindowManagerService是Android系统窗口管理服务,用于采集窗口变更数据,因此当WindowManagerService为目标服务时,目标数据包括窗口增加数据、窗口尺寸调整数据、窗口删除数据和窗口焦点变化数据中的至少一种。AccessibilityManagerService是Android系统无障碍服务,用于采集画面控件点击事件数据。AudioService是Android系统音源信息管理服务,用于采集音源变更数据,当目标服务包括AudioService时,目标数据包括焦点请求数据、焦点释放数据和焦点改变数据中的至少一种。
步骤104,所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
在一实施例中,本地监控服务监听到目标服务传递的目标数据后,将目标数据通过建立的连接传递给系统监控服务,系统监控服务对目标数据进行分析和保存处理。
综上所述,在SystemServer启动过程中,创建本地监控服务,并将该本地监控服务注册到ServiceManager中,当ActivityManagerService启动系统监控服务的应用进程时,系统监控服务可以通过ServiceManager获取到本地监控服务的Binder对象,从而与本地监控服务建立连接。在SystemServer启动过程中会启动一系列服务,在一系列服务预先选定目标服务,并设置目标服务监听数据中的目标数据,使得目标服务在监听到目标数据后,将目标数据传递给本地监控服务。进一步地,本地监控服务通过建立的连接将目标数据传递给系统监控服务,系统监控服务在接收到目标数据后,对目标数据进行分析处理。在本申请实施例中允许用户自行进行目标服务和目标数据的选择,其中选择目标服务和目标数据的过程即对Android系统进行埋点的过程,可以实现对系统的全局埋点,并利用本地监控服务和系统监控服务即可以获取Android系统中目标数据,从而无需人工对用户行为的每一个事件对应位置分别写入埋点代码,避免了错埋和漏埋的现象,并且代码复用率高,工作量小,开发周期短,有利用应用程序的优化。
本申请一个实施例提供的埋点数据采集方法,应用于Android系统中,可以包括如下几个步骤:
步骤201,在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager。
步骤202,由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接。
步骤203,ActivityManagerService将监听到的应用进程类型的目标数据传递给本地监控服务,其中所述应用进程类型的目标数据包括应用启动数据、Activity拉起数据、Service创建数据,Activity显示数据和应用退出数据。所述本地监控服务通过建立的连接将所述应用进程类型的目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
在一实施例中,当ActivityManagerService监听到目标数据时,将目标数据传递给本地监控服务。
如图3所示,当ActivityManagerService监听到startInstrumentation(),在启动应用程序后,将采集到的应用程序启动数据即应用程序启动时间数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过ActivityRecord将应用程序启动数据传递给SystemMonitorService进行分析和保存,其中ActivityRecord用于记录Activity的信息,当通过AIDL传输时可以对目标数据进行关键数据简化处理然后再传输,提高数据传输效率。
如图3所示,当ActivityManagerService监听到activityRelaunched()后,将采集到的Activity拉起数据即Activity被Launch的数据集通过sendAppEvent(inttype.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过ActivityRecord将Activity拉起数据传递给SystemMonitorService进行分析和保存。
如图3所示,当ActivityManagerService监听到serviceDoneExecuting()后,将采集到的Service创建数据即Service的onCreate完成时的数据通过sendAppEvent(inttype.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过ActivityRecord将Service创建数据传递给SystemMonitorService进行分析和保存。
如图3所示,当ActivityManagerService监听到notifyActivityLaunched()后,将采集Activity显示数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Objectapp)时,执行saveDataTolist(int type.Object app)指令,并通过ActivityRecord将Activity显示数据传递给SystemMonitorService进行分析和保存。
如图3所示,当ActivityManagerService监听到activityDestroyed()后,将应用退出数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过ActivityRecord将应用退出数据传递给SystemMonitorService进行分析和保存。
在一种可能的实现方式中,所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,包括:所述本地监控服务将所述目标数据依次放入队列中,并启动发送线程;若所述发送线程中存在目标数据,则将所述目标数据通过建立的连接传递给系统监控服务。
如图4所示,当LocalMonitorService接收到监控的数据时,需要将目标数据存放到一个数据队列中,这时启动发送线程,当数据发送后,移除队列。发送线程的触发条件是数据队列中存在目标数据,也就是说如果队列为空,线程则进入休眠状态,当数据队列再次获取到数据时,重新启动发送线程。具体的,在启动发送线程后,发送线程确认是否存在注册者,即通过确认是否存在注册者判断数据队列中是否存在目标数据,如果存在注册者,发送数据,如果不存在注册者则不发送数据。其中,可以预先设定扫描间隔如1s,即如果无注册者,则线程进入定时等待,1s后再次确定是否存在注册者。在一种可能的实现方式中,当LocalMonitorService接收到目标数据时,将目标数据保存到队列时需要判断队列的大小,大小限制根据ro.systemmonitor.data.size属性确认,如果超过这个属性需要做移栈处理,即将最老的目标数据移除队列(丢弃数据),以保证系统不会因为数据队列导致内存溢出。
在一种可能的实现方式中,如图4所示,当系统监控服务接收到目标数据后,根据目标数据的数据类型发送给不同的Monitor进行数据处理。即系统监控服务将应用进程类型的目标数据传递给ActivityMonitor,其中,ActivityMonitor为应用启动数据采集器,根据数据类型进行数据分类,有利于数据的后续利用。
步骤204,SystemServer启动过程中启动的WindowManagerService将监听到的窗口类型的目标数据传递给本地监控服务,其中所述窗口类型的目标数据包括窗口增加数据、窗口尺寸调整数据、窗口删除数据和窗口焦点变化数据。所述本地监控服务通过建立的连接将所述窗口类型的目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
在一实施例中,当WindowManagerService监听到目标数据时,将目标数据传递给本地监控服务。WindowManagerService在SystemServer进程中启动,SystemServer的main()会调用startOtherServices()启动WindowManagerService。
如图5所示,当WindowManagerService监听到addView(),将采集到的窗口增加数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过WindowState将窗口增加数据传递给SystemMonitorService进行分析和保存,其中WindowState表示一个窗口的所有属性,当通过AIDL传输时可以对目标数据进行关键数据简化处理然后再传输,提高数据传输效率。
如图5所示,当WindowManagerService监听到dispatchResized(),将采集到的窗口尺寸调整数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Objectapp)时,执行saveDataTolist(int type.Object app)指令,并通过WindowState将窗口尺寸调整数据传递给SystemMonitorService进行分析和保存。
如图5所示,当WindowManagerService监听到postWindowRemoveCleanupLocked(),将采集到的窗口删除数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Objectapp)时,执行saveDataTolist(int type.Object app)指令,并通过WindowState将窗口删除数据传递给SystemMonitorService进行分析和保存。
如图5所示,当WindowManagerService监听到REPORT_FOCUS_CHANGE,将采集到的窗口焦点变化数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Objectapp)时,执行saveDataTolist(int type.Object app)指令,并通过WindowState将窗口焦点变化数据传递给SystemMonitorService进行分析和保存。
在一种可能的实现方式中,如图4所示,当系统监控服务接收到目标数据后,根据目标数据的数据类型发送给不同的Monitor进行数据处理。即系统监控服务将窗口类型的目标数据传递给WindowMonitor,其中,WindowMonitor为应用窗口画面变更采集器,根据数据类型进行数据分类,有利于数据的后续利用。
步骤205,SystemServer启动过程中启动的AccessibilityManagerService将监听到的目标数据传递给本地监控服务,所述本地监控服务判断所述目标数据是否符合预设类型,若所述目标数据符合预设类型,则所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,其中所述预设类型为点击事件类型,所述点击事件类型的目标数据包括点击数据和长按数据。
在一实施例中,当AccessibilityManagerService监听到目标数据时,将目标数据传递给本地监控服务。AccessibilityManagerService在SystemServer进程中启动,SystemServer的main()会调用startOtherServices()启动AccessibilityManagerService。
如图6所示,当AccessibilityManagerService监听到sendAccessibilityEvent()时,将采集到的目标数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Objectapp)时,执行checkEventTpye()即检测事件类型,若目标数据的事件类型为点击事件或长按事件,执行saveDataTolist(int type.Object app)指令,并通过AccessibilityEvent将点击数据和长按数据传递给SystemMonitorService进行分析和保存。
在一种可能的实现方式中,如图4所示,当系统监控服务接收到目标数据后,根据目标数据的数据类型发送给不同的Monitor进行数据处理。即系统监控服务将点击事件类型的目标数据传递给AppEventMonitor,其中,点击事件类型的目标数据包括点击数据和长按数据,AppEventMonitor为应用画面点击事件采集器,根据数据类型进行数据分类,有利于数据的后续利用。
步骤206,SystemServer启动过程中启动的AudioService将监听到的音源类型的目标数据传递给本地监控服务,其中所述音源类型的目标数据包括焦点请求数据、焦点释放数据和焦点改变数据。所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
在一实施例中,当AudioService监听到目标数据时,将目标数据传递给本地监控服务。AudioService在SystemServer进程中启动,SystemServer的main()会调用startOtherServices()启动AudioService。
如图7所示,当AudioManager监听到requestAudioFocus()时,进一步向AudioService传递requestAudioFocus()指令,使得AudioService执行getCurrentAudioFocus()获取基于焦点请求的音源栈顶数据,该基于焦点请求的音源栈顶数据即为焦点请求数据,将采集到的焦点请求数据通过sendAppEvent(int type.Objectapp)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(inttype.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过FocusRequester将焦点请求数据传递给SystemMonitorService进行分析和保存。
如图7所示,当AudioManager监听到abandonAudioFocus()时,进一步向AudioService传递abandonAudioFocus()指令,使得AudioService执行getCurrentAudioFocus()获取基于焦点释放的音源栈顶数据,该基于焦点释放的音源栈顶数据即为焦点释放数据,将采集到的焦点释放数据通过sendAppEvent(int type.Objectapp)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(inttype.Object app)时,执行saveDataTolist(int type.Object app)指令,并通过FocusRequester将焦点释放数据传递给SystemMonitorService进行分析和保存。
如图7所示,对于车机的音源系统,可能还存在外接音源服务,即ExtAudioService,当AudioManager监听到setExtAudioFocus()时,进一步向AudioService传递setExtAudioFocus()指令,使得AudioService先执行changedAudioFocus(),即进行音源焦点的改变,然后再执行getCurrentAudioFocus()获取基于焦点改变的音源栈顶数据,该基于焦点改变的音源栈顶数据即为焦点改变数据,将采集到的焦点改变数据通过sendAppEvent(int type.Object app)指令传递给LocalMonitorService,LocalMonitorService监听到sendAppEvent(int type.Objectapp)时,执行saveDataTolist(int type.Object app)指令,并通过FocusRequester将焦点改变数据传递给SystemMonitorService进行分析和保存。
在一种可能的实现方式中,如图4所示,当系统监控服务接收到目标数据后,根据目标数据的数据类型发送给不同的Monitor进行数据处理。即系统监控服务将音源类型的目标数据传递给AudioMonitor,其中,AudioMonitor为音源变更数据采集器,根据数据类型进行数据分类,有利于数据的后续利用。
步骤206,在BaseMonitor监听到保存数据时,确认待保存数据大小;若所述待保存数据大小超过设定值,则将所述待保存数据传递给DataManager进行保存。
在一实施例中,BaseMonitor是监控器的基类,是AppEventMonitor、ActivityMonitor、AudioMonitor、WindowMonitor共通基类,用于处理接收数据、保存数据、发送变更等操作。
如图8所示,当BaseMonitor监听到saveData(Object data)时,执行checkLastDataSize(),确定待保存数据大小,如果待保存数据大小超过设定值,则执行saveDataToDisk(int type,List<Object>dataList)指令,将待保存数据传递给DataManager进行保存,即将数据保存在Disk中。DataManager为数据导出管理器,用于将数据导出到Disk中。当系统退出或异常时,会进行release,此时为了保证数据的安全,需要将监听到的目标数据通过DataManager进行保存。并在DataManager进行保存后,BaseMonitor将已保存数据进行clearList。
步骤207,在BaseMonitor监听到数据变更时,将确认后的数据发送至第三方扩展适配包;在第三方扩展适配包监听到获取历史数据时,向DataManager进行历史数据的获取。
在一实施例中,允许将数据进行导出,即传递数据给第三方。具体的,如图9所示,BaseMonitor可以执行sendMonitorDataChanged(int type.Object app)指令,将数据发送给DataExportAdapter即第三方扩展适配包,实现数据提供给用户进行自定义处理。并允许第三方扩展适配包执行requestGetHistoryData()指令,向DataManager进行历史数据的获取。
在一种可能的实现方式中,上述各个实施例所提供的方法可以应用于如图10和图11所示的系统模块图中,所述系统包括APP模块、Framework模块、SysemServer模块和SystemMonitor&Recovery。其中:
APP模块包括:各种App应用。
Framework模块包括:ActivityManager子模块、WindowManager子模块和AudioManager子模块。ActivityManager负责ActivityThread进程创建,Activity生命周期的维护,用于app与ActivityManagerService通信;WindowManager负责Window的操作,用于app与WindowManagerService通信;AudioManager用于音频管理器,获取音源焦点等操作。
SystemServer模块包括:WindowManagerService子模块、ActivityManagerService子模块、AccessibilityManagerService子模块、AudioService子模块、LocalMonitorService子模块。WindowManagerService为Android系统窗口管理模块,用于采集窗口变更数据;ActivityManagerService为Android系统应用程序管理模块,用于采集应用启动信息数据;AccessibilityManagerService为系统无障碍服务模块,用于采集画面控件点击事件数据;AudioService为系统音源信息管理模块,用于采集音源变更数据;LocalMonitorService为在SystemServer中的一个本地服务,用于将采集的数据发送回SystemMonitorService。
SystemMonitor&Recovery模块包括:SystemMonitorSerivice子模块、BaseMonitor子模块、AppEventMonitor子模块、WindowMonitor子模块、ActivityMonitor子模块、AudioMonitor子模块、DataManager子模块、AppMonitorData子模块、DataExportAdapter子模块。SystemMonitorSerivice为系统监控模块主服务,用于与SystemServer通信获取监控所需的数据;BaseMonitor为监控器的基类,是AppEventMonitor、ActivityMonitor、AudioMonitor、WindowMonitor共通基类,用于处理接收数据、保存数据、发送变更等操作,并且AppEventMonitor、ActivityMonitor、AudioMonitor、WindowMonitor会将数据封装成AppMonitorData,以便对数据进行进一步处理;AppEventMonitor为应用画面点击事件采集器;WindowMonitor为窗口画面变更采集器;ActivityMonitor为应用启动数据采集器;AudioMonitor为音源变更数据采集器;DataManager为数据导出管理器,用于将数据导出到Disk中,其中,当BaseMonitor接收的数据大小大于设定值后,会调用DataManager保存起来;AppMonitorData为应用data数据采集器;DataExportAdapter为第三方数据导出适配器,主要用于项目,项目可根据用途定制该模块。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图12,其示出了本申请一个实施例提供的埋点数据采集装置的框图。该装置具有实现上述方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置200应用于Android系统,可以包括:本地监控创建模块201、系统连接建立模块202、第一数据传递模块203、第二数据传递模块204。
本地监控创建模块201,用于在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager;
系统连接建立模块202,用于由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接;
第一数据传递模块203,用于SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务;
第二数据传递模块204,用于所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
本申请提供的技术方案,利用本地监控创建模块201,在SystemServer启动过程中,创建本地监控服务,并将该本地监控服务注册到ServiceManager中;利用系统连接建立模块202,当ActivityManagerService启动系统监控服务的应用进程时,系统监控服务可以通过ServiceManager获取到本地监控服务的Binder对象,从而与本地监控服务建立连接。在SystemServer启动过程中会启动一系列服务,在一系列服务预先选定目标服务,并设置目标服务监听数据中的目标数据,利用第一数据传递模块203,在目标服务在监听到目标数据后,将目标数据传递给本地监控服务,进一步利用第二数据传递模块204,使得本地监控服务通过建立的连接将目标数据传递给系统监控服务,系统监控服务在接收到目标数据后,对目标数据进行处理。在本申请实施例中允许用户自行进行目标服务和目标数据的选择,其中选择目标服务和目标数据的过程即对Android系统进行埋点的过程,可以实现对系统的全局埋点,并利用本地监控服务和系统监控服务即可以获取Android系统中目标数据,从而无需人工对用户行为的每一个事件对应位置分别写入埋点代码,避免了错埋和漏埋的现象,并且代码复用率高,工作量小,开发周期短,有利用应用程序的优化。
可选的,所述目标服务包括ActivityManagerService,所述目标数据为应用进程类型的目标数据,包括应用启动数据、Activity拉起数据、Service创建数据,Activity显示数据和应用退出数据中的至少一种。
可选地,所述目标服务包括WindowManagerService,所述目标数据为窗口类型的目标数据,包括窗口增加数据、窗口尺寸调整数据、窗口删除数据和窗口焦点变化数据中的至少一种。
可选的,所述目标服务包括AccessibilityManagerService,则第二数据传递模块,用于判断所述目标数据是否符合预设类型;若所述目标数据符合预设类型,则所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
可选的,所述目标服务包括AudioService,所述目标数据为音源类型的目标数据,包括焦点请求数据、焦点释放数据、焦点改变数据中的至少一种。
在本申请一实施例中,第二数据传递模块包括:
发送线程启动单元,用于所述本地监控服务将所述目标数据依次放入队列中,并启动发送线程;
目标数据发送单元,用于若所述发送线程中存在目标数据,则将所述目标数据通过建立的连接传递给系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
在本申请一实施例中,所述目标数据包括应用进程类型的目标数据、窗口类型的目标数据、点击事件类型的目标数据和音源类型的目标数据;所述装置还包括:第三数据传递模块,所述第三数据传递模块,用于所述系统监控服务将应用进程类型的目标数据传递给ActivityMonitor;所述系统监控服务将窗口类型的目标数据传递给WindowMonitor;所述系统监控服务将点击事件类型的目标数据传递给AppEventMonitor;所述系统监控服务将音源类型的目标数据传递给AudioMonitor。
在本申请一实施例中,所述装置还包括:数据保存处理模块,用于在BaseMonitor监听到保存数据时,确认待保存数据大小;若所述待保存数据大小超过设定值,则将所述待保存数据传递给DataManager进行保存。
在本申请一实施例中,所述方法还包括:数据扩展处理模块,用于在BaseMonitor监听到数据变更时,将确认后的数据发送至第三方扩展适配包;在第三方扩展适配包监听到获取历史数据时,向DataManager进行历史数据的获取。
在本申请一实施例中,所述装置还包括:系统连接断开模块,用于在所述系统监控服务监听到退出时,断开所述本地监控服务和所述系统监控服务间的连接。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参考图13,其示出了本申请一个实施例提供的计算机设备的结构框图。该计算机设备可用于实施上述实施例中提供的埋点数据采集方法。该计算机设备可以是PC或者服务器,或者其它具备数据处理和存储能力的设备。具体来讲:
所述计算机设备300包括中央处理单元(CPU)301、包括随机存取存储器(RAM)302和只读存储器(ROM)303的系统存储器304,以及连接系统存储器304和中央处理单元301的系统总线305。所述计算机设备300还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)306,和用于存储操作系统313、第一应用程序314和其他程序模块315的大容量存储设备307。
所述基本输入/输出系统306包括有用于显示信息的显示器308和用于用户输入信息的诸如鼠标、键盘之类的输入设备309。其中所述显示器308和输入设备309都通过连接到系统总线305的输入输出控制器310连接到中央处理单元301。所述基本输入/输出系统306还可以包括输入输出控制器310以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器310还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备307通过连接到系统总线305的大容量存储控制器(未示出)连接到中央处理单元301。所述大容量存储设备307及其相关联的计算机可读介质为计算机设备300提供非易失性存储。也就是说,所述大容量存储设备307可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器304和大容量存储设备307可以统称为存储器。
根据本申请的各种实施例,所述计算机设备300还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算机设备300可以通过连接在所述系统总线305上的网络接口单元311连接到网络312,或者说,也可以使用网络接口单元311来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行。上述一个或者一个以上程序包含用于执行上述埋点数据采集方法的指令。
在示例中实施例中,还提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集。所述至少一条指令、至少一段程序、代码集或指令集经配置以由一个或者一个以上处理器执行,以实现上述埋点数据采集方法。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被计算机设备的处理器执行时实现上述埋点数据采集方法。
可选地,上述计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,当该计算机程序产品被执行时,其用于实现上述埋点数据采集方法。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种埋点数据采集方法,其特征在于,应用于Android系统中,所述方法包括:
在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager;
由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接;
SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务;
所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
2.根据权利要求1所述的方法,其特征在于,所述目标服务包括ActivityManagerService,所述SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务,包括:
所述ActivityManagerService将监听到的应用进程类型的目标数据传递给本地监控服务,其中所述应用进程类型的目标数据包括应用启动数据、Activity拉起数据、Service创建数据,Activity显示数据和应用退出数据中的至少一种;
或者,所述目标服务包括WindowManagerService,所述SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务,包括:
SystemServer启动过程中启动的WindowManagerService将监听到的窗口类型的目标数据传递给本地监控服务,其中所述窗口类型的目标数据包括窗口增加数据、窗口尺寸调整数据、窗口删除数据和窗口焦点变化数据中的至少一种;
或者,所述目标服务包括AccessibilityManagerService,则所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,包括:
判断所述目标数据是否符合预设类型;
若所述目标数据符合预设类型,则所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务;
或者,所述目标服务包括AudioService,所述SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务,包括:
SystemServer启动过程中启动的AudioService将监听到的音源类型的目标数据传递给本地监控服务,其中所述音源类型的目标数据包括焦点请求数据、焦点释放数据和焦点改变数据中的至少一种。
3.根据权利要求1或2所述的方法,其特征在于,所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,包括:
所述本地监控服务将所述目标数据依次放入队列中,并启动发送线程;
若所述发送线程中存在目标数据,则将所述目标数据通过建立的连接传递给系统监控服务。
4.根据权利要求1或2所述的方法,其特征在于,所述目标数据包括应用进程类型的目标数据、窗口类型的目标数据、点击事件类型的目标数据和音源类型的目标数据;所述方法还包括:
所述系统监控服务将应用进程类型的目标数据传递给ActivityMonitor;
所述系统监控服务将窗口类型的目标数据传递给WindowMonitor;
所述系统监控服务将点击事件类型的目标数据传递给AppEventMonitor;
所述系统监控服务将音源类型的目标数据传递给AudioMonitor。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在BaseMonitor监听到保存数据时,确认待保存数据大小;
若所述待保存数据大小超过设定值,则将所述待保存数据传递给DataManager进行保存。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在BaseMonitor监听到数据变更时,将确认后的数据发送至第三方扩展适配包;
在第三方扩展适配包监听到获取历史数据时,向DataManager进行历史数据的获取。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
在所述系统监控服务监听到退出时,断开所述本地监控服务和所述系统监控服务间的连接。
8.一种埋点数据采集装置,其特征在于,应用于Android系统,所述装置包括:
本地监控创建模块,用于在SystemServer启动过程中,创建本地监控服务,并注册到ServiceManager;
系统连接建立模块,用于由在SystemServer启动过程中启动的ActivityManagerService启动系统监控服务的应用进程,所述系统监控服务通过ServiceManager,建立与所述本地监控服务的连接;
第一数据传递模块,用于SystemServer启动过程中启动的目标服务将监听到的目标数据传递给本地监控服务;
第二数据传递模块,用于所述本地监控服务通过建立的连接将所述目标数据传递给所述系统监控服务,以使得所述系统监控服务对所述目标数据进行处理。
9.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111525576.6A CN114371973A (zh) | 2021-12-14 | 2021-12-14 | 一种埋点数据采集方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111525576.6A CN114371973A (zh) | 2021-12-14 | 2021-12-14 | 一种埋点数据采集方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114371973A true CN114371973A (zh) | 2022-04-19 |
Family
ID=81140776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111525576.6A Pending CN114371973A (zh) | 2021-12-14 | 2021-12-14 | 一种埋点数据采集方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114371973A (zh) |
-
2021
- 2021-12-14 CN CN202111525576.6A patent/CN114371973A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648940B (zh) | 远程过程调用方法及装置 | |
CN111813573B (zh) | 管理平台与机器人软件的通信方法及其相关设备 | |
CN110884537A (zh) | 联动功能实现系统及方法 | |
CN106789913B (zh) | 用户账号管理方法及装置 | |
CN108063809B (zh) | 机器设备数据采集方法以及采集系统 | |
CN113055225A (zh) | 网络故障分析数据的获取方法、终端及服务器 | |
CN114371973A (zh) | 一种埋点数据采集方法、装置、设备及存储介质 | |
CN109039427B (zh) | 一种船舶监控管理装置 | |
CN111324364A (zh) | 一种设备管理的方法、装置、设备及存储介质 | |
JP2595833B2 (ja) | 遠隔保守装置 | |
CN112860391B (zh) | 一种动态集群渲染资源管理系统及方法 | |
CN113965447B (zh) | 一种在线云诊断方法、装置、系统、设备及存储介质 | |
CN111182047B (zh) | 用于在跨网络的大数据平台之间转移文件的方法和系统 | |
CN114217932A (zh) | 第三方对接异常处理方法及系统 | |
CN112118420A (zh) | 一种监控系统自动配置方法及装置 | |
CN111200508B (zh) | 一种消息发送方法及网关 | |
CN113128297A (zh) | 一种设备对接方法、装置、电子设备及存储介质 | |
CN112035407A (zh) | 一种文件传输系统及传输方法 | |
CN111343261A (zh) | 基于无线热点传输的手机数据备份方法 | |
CN111611134A (zh) | 一种时间监控方法、装置、应用端及存储介质 | |
CN114884987B (zh) | 获取设备状态信息的方法、装置及存储介质 | |
CN112215587B (zh) | 多设备自动化执行业务流程交互任务的方法、装置和系统 | |
CN111368512B (zh) | 一种业务数据的转换方法、装置、设备及存储介质 | |
CN116521593A (zh) | 基板管理控制器的通信方法、系统及相关设备 | |
KR0151903B1 (ko) | 원격지 망관리 시스템에서 집중형 액세스 노드 시스템의 성능 관리 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |