CN109308241A - 监听应用程序启动流程方法、装置、终端设备和存储介质 - Google Patents
监听应用程序启动流程方法、装置、终端设备和存储介质 Download PDFInfo
- Publication number
- CN109308241A CN109308241A CN201811033394.5A CN201811033394A CN109308241A CN 109308241 A CN109308241 A CN 109308241A CN 201811033394 A CN201811033394 A CN 201811033394A CN 109308241 A CN109308241 A CN 109308241A
- Authority
- CN
- China
- Prior art keywords
- activity
- application program
- name
- launched
- monitoring
- 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.)
- Granted
Links
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/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
Abstract
本发明公开了一种监听应用程序启动流程方法、装置、终端设备和存储介质,用以监听APPAPP启动流程,拦截相应的APP或者Activity,以向该其传递其运行所需的参数,保证APP运行效果和体验。监听应用程序启动流程的方法,包括:在应用程序或者Activity启动过程中,获取当前待启动的应用程序名称或者Activity名称;根据当前待启动的应用程序名称或者Activity名称,判断是否需要拦截当前启动的应用程序或者Activity;以及确定需要拦截当前启动的应用程序或者活动时,拦截当前启动的应用程序或者活动,向拦截的应用程序或者活动传递预设的参数,向拦截的应用程序或者活动传递预设的参数。
Description
技术领域
本发明涉及应用程序开发技术领域,尤其涉及一种监听应用程序启动流程方法、装置、终端设备和存储介质。
背景技术
随着Android(安卓)软件技术的发展,并且随着每一个应用软件功能的日渐丰富,热更新技术也随之而来。正常开发流程和热更新的开发流程分别如图1a和图1b所示。
热更新,在更新的类或者插件粒度较小的时候使用,亦被称之为热修复,一般用于修复bug。比如更新一个bug方法或者紧急修改lib(库)包,甚至一个类等。在此基础上,现有技术提出了如下3个概念:热部署,App(应用程序)无需重启,activity需要重启,方法内的简单修改;暖部署,App无需重启,activity需要重启,比如资源的修改。冷部署,App需要重启,比如继承关系的改变或方法的签名变化等。
对于热部署和暖部署,由于App无需重启,所以对于不同App之间传值和App内不同activity之间传值就会有漏掉的情况,最终导致无法传值和参数,导致App达不到应有的效果和体验。
发明内容
本发明实施例提供一种监听应用程序启动流程获取方法、装置、终端设备和存储介质,用以监听APP启动流程,拦截相应的APP或者Activity,以向该其传递其运行所需的参数,保证APP运行效果和体验。
第一方面,提供一种监听应用程序启动流程的方法,包括:
在应用程序或者活动启动过程中,获取当前待启动的应用程序名称或者活动名称;
根据当前待启动的应用程序名称或者活动名称,判断是否需要拦截当前启动的应用程序或者活动;以及
确定需要拦截当前启动的应用程序或者活动时,拦截当前启动的应用程序或者活动;
向拦截的应用程序或者活动传递预设的参数。
可选地,获取当前待启动的应用程序名称或者活动名称,包括:
监听活动管理服务传递的意图参数;
根据所述意图参数,获取当前待启动的应用程序名称或者活动名称。
可选地,向拦截的应用程序或者活动传递预设的参数,包括:
调用传递参数函数向拦截的应用程序或者活动传递预设的参数。
可选地,在获取当前待启动的应用程序名称或者活动Activity名称之前,还包括:
确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
可选地,确定监听活动管理服务接收到应用程序启动标识,包括:
如果监听到所述启动器进程调用监听活动管理服务的应用程序启动函数时,则确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
第二方面,提供一种监听应用程序启动流程的装置,包括:
获取单元,用于在应用程序或者活动启动过程中,获取当前待启动的应用程序名称或者活动名称;
判断单元,根据当前待启动的应用程序名称或者活动名称,判断是否需要拦截当前启动的应用程序或者活动;
拦截单元,用于确定需要拦截当前启动的应用程序或者活动时,拦截当前启动的应用程序或者活动。
可选地,所述获取单元,用于监听活动管理服务传递的意图参数;根据所述意图参数,获取当前待启动的应用程序名称或者活动名称。
可选地,传递单元,用于在所述拦截单元拦截当前启动的应用程序或者活动之后,调用传递参数函数向拦截的应用程序或者活动传递预设的参数。
可选地,所述监听应用程序启动流程的装置,还包括:
确定单元,用于在所述获取单元获取当前待启动的应用程序名称或者活动名称之前,确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
可选地,所述确定单元,用于如果监听到所述启动器进程调用监听活动管理服务的startActivity函数时,则确定AMS接收到启动器进程发送的应用程序启动标识。
第三方面,提供一种终端设备,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述任一监听应用程序启动流程方法。
第四方面,提供一种计算机可读介质,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行上述任一监听应用程序启动流程方法。
本发明实施例提供的监听应用程序启动流程的方法、装置和存储介质,通过在应用程序或者Activity启动过程中,监听当前启动的应用程序或者Activity名称,如果根据当前启动的应用程序或者Activity名称,确定需要拦截该应用程序或者Activity时,则拦截当前启动的应用程序或者Activity,这样,可以向拦截的应用程序或者Activity传递参数等,由此可以保证应用程序或者Activity运行效果和体验。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1a为应用程序正常开发流程示意图;
图1b为应用程序热更新开发流程示意图;
图2为本发明实施例的应用场景示意图;
图3为本发明实施例中,点击App图标到启动App的流程示意图;
图4为本发明实施例中,Activity启动流程示意图;
图5为本发明实施例提供的监听应用程序启动流程方法的实施流程示意图;
图6为本发明实施例提供的监听应用程序启动流程方法的实施流程示意图;
图7为本发明实施例提供的监听应用程序启动流程的装置的结构示意图。
具体实施方式
为了保证应用程序或者Activity运行效果和体验,本发明实施例提供了一种监听应用程序启动流程方法、装置、终端设备和存储介质。
本发明实施例提供的监听应用程序启动流程方法可以应用于终端设备中。本发明实施例涉及的终端设备为可以安装各类应用程序,并且能够将已安装的应用程序中提供的对象进行显示的设备,该电子设备可以是移动的,也可以是固定的,例如,手机、平板电脑、各类可穿戴设备、车载设备、个人数字助理(personal digital assistant,PDA)、销售终端(point of sales,POS)、地铁站内的监控设备或其它能够实现上述功能的电子设备等。其中,应用程序为可以完成某项或多项特定工作的计算机程序,它具有可视的显示界面,能与用户进行交互,比如电子地图和微信等都可以称为应用程序。
下面参照图2来描述根据本发明的终端设备100。图2示出了根据一些实施例的包括触摸屏的终端设备100的框图,所述终端设备100可以包括输入单元130、显示单元140、存储器120、处理器190和外部接口197等部件。
本领域技术人员可以理解,图2仅仅是本发明实施例涉及的终端设备的举例,并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
所述输入单元130可用于接收输入的数字或字符信息,以及产生与所述便携式多功能装置的用户设置以及功能控制有关的键信号输入。具体地,输入单元130可包括触摸屏131以及其他输入设备132。所述触摸屏131可收集用户在其上或附近的触摸操作(比如用户使用手指、关节、触笔等任何适合的物体在触摸屏上或在触摸屏附近的操作),并根据预先设定的程序驱动相应的连接装置。触摸屏可以检测用户对触摸屏的触摸动作,将所述触摸动作转换为触摸信号发送给所述处理器190,并能接收所述处理器190发来的命令并加以执行;所述触摸信号至少包括触点坐标信息。所述触摸屏131可以提供所述终端设备100和用户之间的输入界面和输出界面。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触摸屏。除了触摸屏131,输入单元130还可以包括其他输入设备。具体地,其他输入设备132可以包括但不限于物理键盘、功能键(比如音量控制按键132、开关按键133等)、轨迹球、鼠标、操作杆等中的一种或多种。
所述显示单元140可用于显示由用户输入的信息或提供给用户的信息以及终端设备100的各种菜单。进一步的,触摸屏131可覆盖显示面板141,当触摸屏131检测到在其上或附近的触摸操作后,传送给处理器190以确定触摸事件的类型,随后处理器190根据触摸事件的类型在显示面板141上提供相应的视觉输出。
所述存储器120可用于存储指令和数据,存储器120可主要包括存储指令区和存储数据区,存储数据区可存储关节触摸手势与应用程序功能的关联关系;存储指令区可存储操作系统、至少一个功能所需的指令等;所述指令可使处理器190执行以下方法,具体方法包括:在应用程序或者Activity启动过程中,获取当前待启动的应用程序名称或者Activity名称,根据当前待启动的应用程序名称或者活动Activity名称,判断是否需要拦截当前启动的应用程序或者Activity,确定需要拦截当前启动的应用程序或者Activity时,拦截当前启动的应用程序或者Activity,向拦截的应用程序或者活动传递预设的参数。
处理器190是终端设备100的控制中心,利用各种接口和线路连接整个终端设备100的各个部分,通过运行或执行存储在存储器120内的指令以及调用存储在存储器120内的数据,执行终端设备100的各种功能和处理数据,从而对终端设备100进行整体监控。可选的,处理器190可包括一个或多个处理单元;优选的,处理器190可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器190中。在一些实施例中,处理器、存储器、可以在单一芯片上实现,在一些实施例中,他们也可以在独立的芯片上分别实现。在本发明实施例中,处理器190还用于调用存储器中的指令以实现监听应用程序启动流程方法。
终端设备100还包括外部接口197,所述外部接口可以是标准的Micro USB接口,也可以使多针连接器,可以用于连接终端设备100与其他装置进行通信,也可以用于连接充电器为终端设备100充电。尽管未示出,终端设备100还可以包括摄像头、闪光灯等,在此不再赘述。
发明人发现,对于热部署和暖部署,由于App无需重启,只是进行内部服务重新启动,所以不会加载传值函数传递APP运行所需的值和参数,导致App达不到应有的效果和体验。例如,一些对硬件配置要求较高的手机游戏App,通常在启动App时会采集手机设备的硬件信息,如显卡、CPU、内存等信息,根据不同的硬件配置传递不同的值,以达到更好的清晰度等显示效果。如果启动游戏App后开始内部更新,由于只是对游戏App内部服务进行重启,不会加载传值函数传递终端设备的硬件信息如显卡、CPU或者内存等相关的值和参数,导致进入游戏后显示界面会变得模糊。
有鉴于此,本发明实施例中,从Android系统层出发,对Android ROM中的framework(架构)层进行分析,分析Android从点击App图标到启动App之间的流程,并分析ActivityManager(活动管理器)和ActivityManagerService(AMS,活动管理服务)的交互流程,实现在App启动前进行拦截,这样,可以控制App的运行逻辑,并传递任意的参数给App,由此可以解决Android内部更新导致的传参失败的问题。其中,ActivityManager用来管理应用程序生命周期并提供常用的导航回退功能。AMS是Android中最为重要的服务之一,负责所有应用程序的创建、管理,在framework(架构)层有着举足轻重的作用。主要的功能是通过Binder进程间通信与Client(客户端)进程的ActivityManager(活动管理器)通信,创建Activity之后将其交由ActivityManager来管理。Activity,是一个应用程序组件,在一个Android应用中,一个Activity通常就是一个单独的交互界面,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。
如图3所示,其为点击App图标到启动App的流程示意图。Boot ROM用于存放Android引导启动系统的存储器,BootLoader是一个Rom里的固件管理工具。Android ROM是一种只能读出事先所存数据的固态半导体存储器,ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。
Android基于Linux系统,启动Android之后Linux内核加载完成时会启动init进程,init进程,是内核启动的第一个用户级进程。init进程是ps(Process status,查看进程状态的命令)指令输出结构中pid(进程标识符)为1的进程,而ppid(父进程ID)为1的进程是init进程生成的守护进程,守护进程是由init进程调用fork()函数与exec()函数创建新的守护进程,init进程运行系统所需的本地守护进程和zygote进程。
其中,fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。
由init进程会创建(fork)出zygote进程。Android开启所有的App,都相当于开启一个新的进程,而Android系统开启新进程的方式,是通过创建(fork)一个zygote进程实现的。zygote进程生成系统服务器端和各种java应用程序进程。在zygote开启的时候,调用ZygoteInit.main()会初始化SystemServer(系统服务),它也是个进程,Android系统里边重要的服务模块都是在这个进程里面开启的,其中AMS就是在SystemServer开启的时候会初始化。
Android App内部通过调用startActivity()并不能直接打开App,该方法会通过一系列的调用,最后通知AMS,由AMS来通知Zygote进程来创建(fork)一个新进程来启动App。在Android中,App与AMS通过Binder进行IPC(系统进程间通信)通信,AMS与Zygote通过socket(插口)进行IPC通信。
启动App都由Launcher启动,Launcher:Android的启动器,所有的Android App都需要它来启动,其完成从点击APP图标到App启动的过程。当点击App图标后,会调用Launcher的startActivitySafely方法,在startActivitySafely函数里会调用startActivity函数,而startActivity的本质是调用Activity.startActivityForResult()。
处理与调度Activity需要AMS,ActivityThread(活动线程)和Instrumentation三者的交互。ActivityThread是Android的主线程,是APP的真正入口,当启动APP后会调用main()开始运行,开启消息循环队列,这就是UI(User Interface,用户界面)线程或者叫主线程。与ActivityManagerService配合,一起完成Activity的管理工作。而使用Instrumentation可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在JVM上的程序。
在Android中每个Activity都持有Instrumentation对象的引用,当startActivityForResult()调用之后,实际上调用的execStartActivity()方法,在该方法中会继续调用ActivityManagerNative.getDefault().startActivity()方法,ActivityManagerNative.getDefault返回的是AMS的远程接口,即ActivityManagerProxy(活动管理代理类)。所以上述调用关系可以总结为ActivityManagerProxy.startActivity(),在这个startActivity做的事情就是IPC通信,利用Binder对象向AMS发送数据进行通信。需要说明的是,Binder只能传递数据,并不知道要调用AMS的哪个方法,在Android中是通过在数据中添加方法的唯一标识的方式来解决此问题的,启动App时需要传递START_ACTIVITY_TRANSACTION标识。
在图3中:
loop()函数做的都是与具体平台无关的工作,主要包括初始化启动次数限制机制、设置软件版本号、打印启动信息、解析命令等。
SurfaceFlinger,是一个独立的Service,它接收所有Window的Surface作为输入,根据ZOrder,透明度,大小,位置等参数,计算出每个Surface在最终合成图像中的位置,然后交由HWComposer或OpenGL生成最终的显示Buffer,然后显示到特定的显示设备上。SurfaceFlinger线程启动是由kenerl(内核)加载init.rc文件后,执行system/bin文件夹下的可执行文件:surfaceflinger,启动main函数。
FrameBuffer,帧缓冲,是用一个视频输出设备从包含完整的帧数据的一个内存缓冲区中来驱动一个视频显示设备。
MediaServer,MediaServer进程提供Android上的多媒体服务。
AudioFlinger,AudioFlinger是Android音频系统的两大服务之一,用于向下访问AudioHardware,实现输出音频数据,控制音频参数,向上通过IAudioFinger接口提供服务。
CameraService,是指相机服务。
MediaPlayerService,在Android控制媒体播放器,通过对文件格式的判断来选择不同的播放器来播放音乐。
PowerManagerService服务是Android系统的上层的电源管理服务,主要负责系统待机、屏幕背光、按键背光、键盘背光以及用户事件的处理。通过锁的申请与释放以及默认的待机时间来控制系统的待机状态;通过系统默认灭屏时间以及用户操作的事件状态控制背光亮、暗。该服务还包括了光线、距离传感器上层查询与控制,LCD亮度的调节最终也是由该服务完成。
InputManagerService服务,用于管理整个系统的输入部分,包括键盘、鼠标、触摸屏等等。
WindowManagerService服务,用于对系统中的窗口进行统一管理。窗口是指屏幕上一块用于绘制各种UI(用户界面)元素并可以响应用户输入的一块矩形区域。
经过以上流程后,从点击桌面图标调用startActivity,把数据和要开启的Activity的请求发送给了AMS。
如图4所示,其为Activity启动流程示意图,包括以下步骤:
S41、Launcher进程中的ActivityManagerProxy向system_server进程中的ActivityManagerService(ASM)发送应用程序启动标识(START_ACTIVITY)。
本步骤中,点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求。
S42、system_server进程中的ActivityManagerService向Zygote进程发送创建进程请求。
本步骤中,system_server进程接收到请求后,向zygote进程发送创建进程的请求。
S43、Zygote进程创建(fork)新进程。
本步骤中,Zygote进程创建(fork)出新的子进程,即App进程。
S44、App进程中的ActivityManagerProxy向system_server进程中的ActivityManagerService发送ATTACH_APPLICATION。
本步骤中,App进程通过Binder IPC向sytem_server进程发起attachApplication请求。
S45、system_server进程中的ActivityManagerService通过realStartActivityLocked()通知system_server进程中的ApplicationThreadProxy(应用进程代理)启动某个Activity。
具体实施时,AMS服务通过realStartActivityLocked函数来通知应用程序进程启动某个Activity。
S46、system_server进程中的ApplicationThreadProxy向App进程中的ApplicationThread发送SCHEDULE_LAUNCH_ACTIVITY。
本步骤中,system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求。
S47、App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息。
S48、主线程在收到Message(消息)后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。
根据图3和图4可知,启动App以及启动Activity之前,都会调用AMS的startActivity函数,据此,在启动App过程中进行拦截,以向当前启动的App或者Activity传递需要传递的参数。
如图5所示,其为本发明实施例提供的监听应用程序启动流程方法的实施原理示意图,从点击应用图标到启动App,Launcher进程发送START_ACTIVITY标识给system_server进程,而AMS就在system_server进程中,在接收到START_ACTIVITY标识之后,AMS会发送请求给Zygote进程,由Zygote进程创建(fork)出App进程,切换到App进程后App就会启动。本发明实施例中,可以应用于system_server进程的AMS这一层,在创建(fork)之前拦截当前启动的App进程,进而可以对该App传递一些参数以及做一些特殊化的功能。
如图6所示,其为本发明实施例提供的监听应用程序启动流程方法的实施流程示意图,可以包括以下步骤:
S61、在应用程序或者Activity启动过程中,获取当前待启动的应用程序名称或者Activity名称。
本步骤中,可以通过监听AMS传递的intent(意图)参数,Intent(意图)主要是解决Android应用的各项组件之间的通讯,根据传递的intent参数,获取当前待启动的应用程序名称或者Activity名称。
具体实施时,App或者Activity启动过程中,在ASM中传递intent参数,intent参数标识Android运行时的实时intent对象,通过intent对象可以获取实时的App包名和Activity名称。
S62、根据当前待启动的应用程序名称或者Activity名称,判断是否需要拦截当前启动的应用程序或者Activity,如果是,则执行步骤S63,否则,执行步骤S61。
S63、拦截当前启动的应用程序或者Activity。
S64、向拦截的App或者Activity传递预设的参数。
具体实施时,可以调用putExtra函数,向拦截的App或者Activity传递参数,这样,可以解决热更新后无法传递相关参数,例如上述示例中向游戏App传递硬件配置参数的问题。putExtra函数用于传递值或者参数,其可以在界面跳转的时候将一些值传递到将要跳转到的界面,例如,B界面要显示A界面的输入框输入的值,那么就可以先获取A界面的输入框里的内容,然后调用putExtra函数将值传递进去。
具体实施时,在执行步骤S61之前,还需要确定接收到Launcher(启动器)进程发送的应用程序启动标识(startActivity),具体地,可以通过监听Launcher进程是否调用AMS的应用程序启动startActivity函数,如果监听到所述启动器进程调用AMS的应用程序启动startActivity函数时,则确定AMS接收到启动器进程发送的应用程序启动标识。
本发明实施例中,通过分析App或者Activity的启动流程发现,AMS中的startActivity发送创建进程请求以通知Zygote进程,通过Zygote会创建(fork)出App的进程,在App进程中负责与AMS交互的是App的代理模块ActivityManagerProxy。所以在AMS的startActivity方法中做处理,就会直接影响到即将启动的App进程,且此时Launcher已经启动App,所以达到了App运行时改变运行行为的目的。
本发明实施例提供的监听应用程序启动流程方法,从系统层面触发,在ActivityManagerService做更改,在启动Activity之前进程拦截,传递正确的参数给App,从而可以保证App运行效果和性能。
本发明实施例提供的监听应用程序启动流程方法,从Android系统本身进行分析,所以适配任意第三方的Android ROM;并且适配Arm(CPU的架构类型)和x86的系统架构;此外,对于Android Runtime(Android的运行环境),Framework的更改是透明的且不会影响Runtime,所以适配于Dalvik和ART两种运行。兼容性更优,效果更彻好,且不会出现各种各样的功能性的问题。本发明实施例不仅适用于真实Android手机,同时适用于各类的Android模拟器。
基于同一发明构思,本发明实施例中还提供了一种监听应用程序启动流程的装置,由于上述装置解决问题的原理与监听应用程序启动流程的方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,其为本发明实施例提供的监听应用程序启动流程的装置的结构示意图,包括:
获取单元71,用于在应用程序启动过程中,获取当前待启动的应用程序名称或者Activity名称;
判断单元72,根据当前待启动的应用程序名称或者活动Activity名称,判断是否需要拦截当前启动的应用程序或者Activity;
拦截单元73,用于确定需要拦截当前启动的应用程序或者活动时,拦截当前启动的应用程序或者活动;
传递单元74,用于在所述拦截单元拦截当前启动的应用程序或者活动之后,向拦截的应用程序或者Activity传递预设的参数。
可选地,所述获取单元,用于监听活动管理服务AMS传递的intent参数;根据所述intent参数,获取当前待启动的应用程序名称或者活动Activity名称。
可选地,传递单元,用于在拦截单元拦截当前启动的应用程序或者活动之后,调用putExtra函数向拦截的应用程序或者活动传递预设的参数。
可选地,所述监听应用程序启动流程的装置,还包括:
确定单元,用于在所述获取单元获取当前待启动的应用程序名称或者Activity名称之前,确定AMS接收到启动器进程发送的应用程序启动标识。
可选地,所述确定单元,用于如果监听到所述启动器进程调用AMS的startActivity函数时,则确定AMS接收到启动器进程发送的应用程序启动标识。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
本申请实施例提供的终端设备,包括:至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行本申请上述任一项监听应用程序启动流程方法。
本发明实施例还提供了一种计算机可读存储介质,存储为执行上述处理器所需执行的计算机可执行指令,其包含用于执行上述处理器所需执行的程序。
在一些可能的实施方式中,本发明提供的监听应用程序启动流程方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述描述的根据本发明各种示例性实施方式的监听应用程序启动流程方法中的步骤,例如,可以执行如图6中所示的步骤S61、在应用程序或者Activity启动过程中,获取当前待启动的应用程序名称或者Activity名称,步骤S62、根据当前待启动的应用程序名称或者活动Activity名称,判断是否需要拦截当前启动的应用程序或者活动Activity,如果是,则执行步骤S63,否则,执行步骤S61;步骤S63、拦截当前启动的应用程序或者Activity;步骤S64、向拦截的应用程序或者Activity传递预设的参数。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本发明的实施方式的用于监听应用程序启动流程的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种监听应用程序启动流程方法,其特征在于,包括:
在应用程序或者活动启动过程中,获取当前待启动的应用程序名称或者活动名称;
根据当前待启动的应用程序名称或者活动名称,判断是否需要拦截当前启动的应用程序或者活动;以及
确定需要拦截当前启动的应用程序或者活动时,拦截当前启动的应用程序或者活动;
向拦截的应用程序或者活动传递预设的参数。
2.如权利要求1所述的方法,其特征在于,获取当前待启动的应用程序名称或者活动名称,包括:
监听活动管理服务传递的意图参数;
根据所述意图参数,获取当前待启动的应用程序名称或者活动名称。
3.如权利要求1所述的方法,其特征在于,向拦截的应用程序或者活动传递预设的参数,包括:
调用putExtra函数向拦截的应用程序或者活动传递预设的参数。
4.如权利要求1所述的方法,其特征在于,在获取当前待启动的应用程序名称或者活动名称之前,还包括:
确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
5.如权利要求4所述的方法,其特征在于,按照以下方法确定监听活动管理服务接收到应用程序启动标识:
如果监听到所述启动器进程调用监听活动管理服务的应用程序启动startActivity函数时,则确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
6.一种监听应用程序启动流程的装置,其特征在于,包括:
获取单元,用于在应用程序启动过程中,获取当前待启动的应用程序名称或者活动名称;
判断单元,根据当前待启动的应用程序名称或者活动名称,判断是否需要拦截当前启动的应用程序或者活动;
拦截单元,用于确定需要拦截当前启动的应用程序或者活动时,拦截当前启动的应用程序或者活动;
传递单元,用于在所述拦截单元拦截当前启动的应用程序或者活动之后,向拦截的应用程序或者活动传递预设的参数。
7.如权利要求6所述的装置,其特征在于,
所述获取单元,用于监听活动管理服务传递的意图意图参数;根据所述意图参数,获取当前待启动的应用程序名称或者活动活动名称。
8.如权利要求6所述的装置,其特征在于,
所述传递单元,用于在所述拦截单元拦截当前启动的应用程序或者活动之后,调用putExtra函数向拦截的应用程序或者活动传递预设的参数。
9.如权利要求6所述的装置,其特征在于,还包括:
确定单元,用于在所述获取单元获取当前待启动的应用程序名称或者活动名称之前,确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
10.如权利要求9所述的装置,其特征在于,
所述确定单元,用于如果监听到所述启动器进程调用监听活动管理服务的startActivity函数时,则确定监听活动管理服务接收到启动器进程发送的应用程序启动标识。
11.一种终端设备,其特征在于,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1~5任一权利要求所述方法的步骤。
12.一种计算机可读介质,其特征在于,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行权利要求1~5任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811033394.5A CN109308241B (zh) | 2018-09-05 | 2018-09-05 | 监听应用程序启动流程方法、装置、终端设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811033394.5A CN109308241B (zh) | 2018-09-05 | 2018-09-05 | 监听应用程序启动流程方法、装置、终端设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109308241A true CN109308241A (zh) | 2019-02-05 |
CN109308241B CN109308241B (zh) | 2020-11-24 |
Family
ID=65224528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811033394.5A Active CN109308241B (zh) | 2018-09-05 | 2018-09-05 | 监听应用程序启动流程方法、装置、终端设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109308241B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110336712A (zh) * | 2019-07-01 | 2019-10-15 | Oppo广东移动通信有限公司 | 移动终端抓取空中包的方法、装置、存储介质与移动终端 |
CN111124519A (zh) * | 2019-12-27 | 2020-05-08 | 珠海全志科技股份有限公司 | 基于输入响应优化安卓应用程序启动速度的方法及系统 |
CN111209059A (zh) * | 2020-01-14 | 2020-05-29 | 中国北方车辆研究所 | 一种嵌入式软件多版本控制系统及方法 |
CN111582922A (zh) * | 2020-04-27 | 2020-08-25 | 支付宝(杭州)信息技术有限公司 | 作弊行为的检测方法、装置和电子设备 |
CN112988281A (zh) * | 2021-04-25 | 2021-06-18 | 浙江口碑网络技术有限公司 | 应用启动方法及装置 |
CN113157377A (zh) * | 2021-05-20 | 2021-07-23 | 读书郎教育科技有限公司 | 一种Android系统实现对应用部分管控的方法及设备 |
CN115016713A (zh) * | 2021-11-30 | 2022-09-06 | 荣耀终端有限公司 | 出行事件订阅方法及电子设备 |
CN115019418A (zh) * | 2021-11-26 | 2022-09-06 | 荣耀终端有限公司 | 蓝牙车钥匙控车方法、装置和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
US20140351240A1 (en) * | 2011-03-06 | 2014-11-27 | Happy Cloud Inc. | Data streaming for interactive decision-oriented software applications |
CN105094922A (zh) * | 2015-08-17 | 2015-11-25 | 北京奇虎科技有限公司 | 应用程序免安装运行控制方法及其装置 |
CN108399084A (zh) * | 2017-02-08 | 2018-08-14 | 中科创达软件股份有限公司 | 一种应用程序的运行方法及系统 |
CN107203363B (zh) * | 2017-06-06 | 2020-02-04 | 网易(杭州)网络有限公司 | 用于应用程序的画质调节的方法、装置及电子设备 |
-
2018
- 2018-09-05 CN CN201811033394.5A patent/CN109308241B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140351240A1 (en) * | 2011-03-06 | 2014-11-27 | Happy Cloud Inc. | Data streaming for interactive decision-oriented software applications |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
CN105094922A (zh) * | 2015-08-17 | 2015-11-25 | 北京奇虎科技有限公司 | 应用程序免安装运行控制方法及其装置 |
CN108399084A (zh) * | 2017-02-08 | 2018-08-14 | 中科创达软件股份有限公司 | 一种应用程序的运行方法及系统 |
CN107203363B (zh) * | 2017-06-06 | 2020-02-04 | 网易(杭州)网络有限公司 | 用于应用程序的画质调节的方法、装置及电子设备 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110336712B (zh) * | 2019-07-01 | 2022-10-28 | Oppo广东移动通信有限公司 | 移动终端抓取空中包的方法、装置、存储介质与移动终端 |
CN110336712A (zh) * | 2019-07-01 | 2019-10-15 | Oppo广东移动通信有限公司 | 移动终端抓取空中包的方法、装置、存储介质与移动终端 |
CN111124519A (zh) * | 2019-12-27 | 2020-05-08 | 珠海全志科技股份有限公司 | 基于输入响应优化安卓应用程序启动速度的方法及系统 |
CN111209059A (zh) * | 2020-01-14 | 2020-05-29 | 中国北方车辆研究所 | 一种嵌入式软件多版本控制系统及方法 |
CN111209059B (zh) * | 2020-01-14 | 2023-03-03 | 中国北方车辆研究所 | 一种嵌入式软件多版本控制系统及方法 |
CN111582922A (zh) * | 2020-04-27 | 2020-08-25 | 支付宝(杭州)信息技术有限公司 | 作弊行为的检测方法、装置和电子设备 |
CN112988281B (zh) * | 2021-04-25 | 2021-08-03 | 浙江口碑网络技术有限公司 | 应用启动方法及装置 |
CN112988281A (zh) * | 2021-04-25 | 2021-06-18 | 浙江口碑网络技术有限公司 | 应用启动方法及装置 |
CN113157377A (zh) * | 2021-05-20 | 2021-07-23 | 读书郎教育科技有限公司 | 一种Android系统实现对应用部分管控的方法及设备 |
CN115019418A (zh) * | 2021-11-26 | 2022-09-06 | 荣耀终端有限公司 | 蓝牙车钥匙控车方法、装置和存储介质 |
CN115019418B (zh) * | 2021-11-26 | 2023-09-05 | 荣耀终端有限公司 | 蓝牙车钥匙控车方法、装置和存储介质 |
CN115016713A (zh) * | 2021-11-30 | 2022-09-06 | 荣耀终端有限公司 | 出行事件订阅方法及电子设备 |
CN115016713B (zh) * | 2021-11-30 | 2023-11-24 | 荣耀终端有限公司 | 出行事件订阅方法及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109308241B (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109308241A (zh) | 监听应用程序启动流程方法、装置、终端设备和存储介质 | |
US9817685B2 (en) | Reconfiguring a snapshot of a virtual machine | |
Halpern et al. | Mosaic: cross-platform user-interaction record and replay for the fragmented android ecosystem | |
US9658942B2 (en) | Dynamic tracing framework for debugging in virtualized environments | |
CN104536802B (zh) | 一种实现应用调用的方法及虚拟机 | |
US8788950B2 (en) | Method for providing multiple mouse inputs in a remote desktop session | |
US9720799B1 (en) | Validating applications using object level hierarchy analysis | |
CN104699591B (zh) | 一种测试场景重现方法以及装置 | |
US20120284696A1 (en) | Method, Apparatuses and a System for Compilation | |
WO2014169565A1 (zh) | 终端的测试方法及装置 | |
US11604627B2 (en) | Systems and methods for on-demand provisioning of robotic process automation environments | |
CN111330280B (zh) | 游戏中的数据处理方法、装置、存储介质与电子设备 | |
US9378054B2 (en) | Testing system with methodology for background application control | |
WO2021238596A1 (zh) | 接口调用方法、装置和计算机可读存储介质 | |
US11941419B2 (en) | Systems and methods for robotic process automation of mobile platforms | |
Rubinov et al. | What are we missing when testing our android apps? | |
CN109800135A (zh) | 一种信息处理方法及终端 | |
Grønli et al. | Meeting quality standards for mobile application development in businesses: A framework for cross-platform testing | |
CN111459606A (zh) | 一种虚拟化下快速创建虚拟机的方法及服务器 | |
Kurtz et al. | Dios: Dynamic privacy analysis of ios applications | |
CN107016262A (zh) | 应用程序权限管理方法及客户端 | |
WO2020221090A1 (zh) | 用于联合运行寄宿应用的方法和设备 | |
Liu et al. | Verifying android applications using java pathfinder | |
CN110795330A (zh) | 一种Monkey压力测试的方法和装置 | |
Zhang et al. | Towards a contextual and scalable automated-testing service for mobile apps |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |