CN105045641B - 一种启动组件的界面的方法及装置 - Google Patents
一种启动组件的界面的方法及装置 Download PDFInfo
- Publication number
- CN105045641B CN105045641B CN201510548970.XA CN201510548970A CN105045641B CN 105045641 B CN105045641 B CN 105045641B CN 201510548970 A CN201510548970 A CN 201510548970A CN 105045641 B CN105045641 B CN 105045641B
- Authority
- CN
- China
- Prior art keywords
- variable
- component
- interface
- application
- class
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明的实施例公开一种启动组件的界面的方法及装置。方法包括:在应用程序的界面被创建之前,获取所述界面的实例调用的所述应用程序的应用程序类的逻辑;将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。应用本发明,可以降低使用和维护组件的代价,提升组件开发效率。
Description
技术领域
本发明涉及计算机通信技术,尤其涉及一种启动组件的界面(Activity)的方法及装置。
背景技术
目前,安卓(Android)操作系统以其操作简单且方便快捷的特性,越来越为用户所接受,已普遍应用于用户的工作以及生活中。
组件是用于构造操作应用系统的可复用的实现某一特定功能的模块,具有特定的功能和自主能力,按一定的接口规范实现互操作。其中,一Android应用程序由多个组件组成,每一组件实现特定的功能,例如,有的组件可以作为Android操作系统进入应用程序的入口点,各组件协同合作,共同组成一个完整的应用程序。实际应用中,组件可以单独地开发和测试,各组件之间通过接口进行交互,实现信息的传递和互操作。组件化技术是为了将应用程序模块化,使得每一组件可作为分离的编译单元建立并得到再利用,可以简化应用程序的开发。当Android操作系统启动一组件,会启动该组件所属的应用程序的进程,并实例化组件所需要的类。举例来说,当启动拍照(组件)的Activity时,会启动拍照应用程序(拍照组件所属的应用程序为拍照应用程序)的进程。每一应用程序(application)都会拥有一application类,当应用程序启动(实际为组件启动)时,Android操作系统就会触发该应用程序中的application类的方法。实际开发中,程序员可以在该application类中加入需要的逻辑,例如,加入一些服务的初始化逻辑,以对该application类实例进行初始化。
由上述可见,通过触发该组件对应的应用程序中的application类的方法,只能在该application类的方法中加入应用程序需要的逻辑,使得组件中需要加入的逻辑需与应用程序的application类的方法中加入的逻辑相同,导致使用和维护组件的代价较大,组件开发效率较低。
发明内容
有鉴于此,本发明实施例提供一种启动组件的界面的方法及装置,解决使用和维护组件代价较高以及组件开发效率较低的技术问题。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,本发明实施例提供一种启动组件的界面的方法,包括:
在应用程序的界面被创建之前,获取所述应用程序的界面的实例调用的所述应用程序的应用程序类的逻辑;
将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;
使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。
本发明实施例提供的启动组件的界面的方法,在应用程序的界面被创建之前,获取所述界面的实例调用的所述应用程序的应用程序类的逻辑,将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法,从而实现在组件中加入application类,并实现在组件的启动阶段中加入需要的逻辑代码,减少程序员使用和维护组件的代价,有效提升组件开发效率。
另一方面,本发明实施例提供一种启动组件的界面的装置,包括:监测处理模块、变量替换模块以及实例调用模块,其中,
监测处理模块,用于在应用程序的界面被创建之前,获取所述应用程序的界面的实例调用的所述应用程序的应用程序类的逻辑;
变量替换模块,将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;
实例调用模块,使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。
本发明实施例提供的启动组件的界面的装置,监测处理模块在应用程序的界面被创建之前,获取所述界面的实例调用的所述应用程序的应用程序类的逻辑,变量替换模块将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法,实例调用模块使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。从而实现在组件中加入application类,并实现在组件的启动阶段中加入需要的逻辑代码,减少程序员使用和维护组件的代价,有效提升组件开发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例启动组件的界面的方法总体流程示意图;
图2为本发明实施例启动组件的界面的方法具体流程示意图;
图3为本发明实施例启动组件的界面的装置结构示意图;
图4为本发明实施例启动组件的界面的装置另一结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例启动组件的界面的方法总体流程示意图。参见图1,该流程包括:
步骤01,在应用程序的界面被创建之前,获取所述应用程序的界面的实例调用的所述应用程序的应用程序类的逻辑;
步骤02,将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;
步骤03,使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。
其中,所述将所述应用程序的应用程序类中的第一变量替换为第二变量包括:
确定当前启动的界面为第一次启动的组件的界面,利用反射机制,将应用程序类中的第一变量替换为所述组件的界面的类名表示的第二变量,并设置所述组件的界面的类名表示的第二变量的父类与所述第一变量相同。
较佳地,所述第一变量位于第一主线程(mMainThread)变量中,所述第一主线程变量位于第一包信息(mPackageInfo)变量中,所述第一包信息变量位于第一基础变量(mBase)中,所述第一基础变量位于所述应用程序类中。
作为一可选实施例,所述使用所述组件的应用程序类的启动方法启动所述组件的应用程序类包括:
调用所述应用程序的界面线程(ActivityThread)实例,并使所述界面线程实例通过所述组件的界面的类名表示的第二变量中的方法调用所述组件的界面的方法,启动所述组件的应用程序类。
在组件的界面切换至应用程序的界面时,调用所述组件的界面的类名表示的第二变量的方法,利用JAVA反射机制,将置空的应用程序的第三变量(mApplication)替换为保存的所述应用程序类中的第一变量(mInstrumentation),所述第三变量为一空的所述应用程序的应用程序类的系统调用方法。
本发明实施例中,所述利用反射机制,将应用程序类中的第一变量替换为所述组件的界面的类名表示的第二变量包括:
利用JAVA反射机制,将应用程序的应用程序类中的第三变量置空;
当前启动的界面检查所述第三变量是否置空,如果置空,创建一新应用程序类;
将新应用程序类中的第一变量替换为所述组件的界面的类名表示的变量;
关联当前的组件的界面与新应用程序类。
实际应用中,所述方法进一步包括:
在所述新应用程序类中,重写所述应用程序的界面线程实例的方法,并在重写的方法中加入预先设置的组件逻辑。
图2为本发明实施例启动组件的界面的方法具体流程示意图。参见图2,该方法包括:
步骤101,在监测到ActivityThread实例调用performLaunchActivity方法创建application类的逻辑后,判断当前待启动的Activity是否为第一次启动的组件的Activity,所述ActivityThread实例为应用程序接收到Android操作系统的通知后生成的;
本步骤中,应用程序在启动Activity时,不管是应用程序的Activity还是组件的Activity,Android操作系统都会触发该应用程序中的application类的方法,通过该application类的方法发送启动请求给Android操作系统,Android操作系统会接收启动请求后,对该启动请求执行一系列的检验,在检验成功后,通知应用程序通过newActivity方法生成一Activity的实例,即ActivityThread实例。其中,newActivity方法为Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量中的方法,对应Activity的创建逻辑,即:
mInstrumentation----->newActivity。
本发明实施例中,ActivityThread实例管理所有用户接口(UI,User Interface)事件,Android操作系统通过ActivityThread实例控制Activity的状态。其中,Activity的状态包括:创建状态(onCreate方法)、启动状态(onStart方法)、重启动状态(onRestart方法)、显示(运行)状态(onResume方法)、暂停状态(onPause方法)、停止状态(onStop方法)以及销毁状态(onDestory方法)。
关于判断当前启动的Activity是否为组件的Activity,且该组件的Activity是否为第一次启动为公知技术,在此略去详述。
步骤102,如果当前启动的Activity为第一次启动的组件的Activity,利用反射机制,将Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为所述组件的Activity的类名表示的变量,并设置所述组件的Activity的类名表示的变量的父类与所述mInstrumentation变量相同;
本步骤中,变量是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问。
较佳地,反射机制为JAVA反射机制。设置所述组件的Activity的类名表示的变量的父类与所述mInstrumentation变量相同是依据Activity的启动机制,以确保变量替换的成功,即创建继承于所述应用程序的ActivityThread实例的Instrumentation类的子类,该子类为组件的Activity的类名表示的变量。
作为一可选实施例,利用反射机制,将Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为所述组件的Activity的类名表示的变量包括:
A11,利用JAVA反射机制,将应用程序的application类中的mBase变量的mApplication置空;
本步骤中,通过将应用程序的application类中的mBase变量的mApplication置空,可以在启动组件时,组件的Activity查询到已经存在application类,从而避免直接将已存在的application类与组件的Activity进行关联,导致与组件的Activity进行关联的为应用程序的application类,不能实现在组件的application类中进行自定义逻辑。
本发明实施例中,由于application类会在应用程序启动时去触发该application类的方法,也就是说,应用程序一旦启动,应用程序的application类就会执行内部方法。因而,application类不会被多次调用,在创建application逻辑时,启动的Activity(组件的Activity或应用程序的Activity)首先会检查之前有没有创建过application类,如果application类中的mBase变量的mApplication不为空,表示创建过application类,则将该创建的application类与新创建的Activity进行关联,如果新创建的Activity为组件的Activity,为了加入组件的自定义逻辑,需要将应用程序的application类替换成组件的applictaion类,而本发明实施例的方法是通过将application类中相应参数置空。其中,Activity拥有获取application类的功能。如果application类中的mBase变量的mApplication为空,表示未创建过application类,则创建一新application类,并触发该新application类的onCreate方法(启动方法)。
本发明实施例中,将应用程序的application类中的mBase变量的mApplication置空的操作如下:
CustomInstrumentation实例---->置空----->mInstrumentation---->newActivity。
作为一可选实施例,在将应用程序的application类中的mBase变量的mApplication置空之前,该方法进一步包括:
保存所述Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量。
本步骤中,通过保存应用程序的Application类中的变量,可以在后续由组件的Activity切换至应用程序的Activity时,再次进行变量替换以使切换后的应用程序的Activity能够正常运行。
A12,判断当前启动的Activity检查所述mApplication是否置空,如果置空,创建一新application类;
本步骤中,由于当前启动的Activity为组件的Activity,因而,创建的新application类为组件的Activity的application类。当应用程序检查到mApplication为空的情况下,创建一新application类,可以导致后续CustomInstrumentation实例中的newApplication方法被触发,该新application类为需要创建的组件的application类,操作如下:
CustomInstrumentation实例---->newApplication---->创建组件的application类。
这样,在后续流程中,就可以将组件的application类与组件关联起来。
本发明实施例中,如果Activity检查mApplication没有置空,即组件的Activity查询到已经存在application类(即存在未置空的mApplication,也就是现有技术中应用程序的application类),直接将已存在的application与组件的Activity进行关联,从而在后续应用中,Android操作系统触发该应用程序中的application类的方法,则后续对应Activity的创建回调逻辑为:
mInstrumentation------>callActivityOnCreate。
A13,将新Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为所述组件的Activity的类名表示的变量;
本步骤中,通过分析android操作系统源码,采用反射机制,将分析得到的android操作系统源码中对应的应用程序Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为子类(CustomInstrumentation)。较佳地,采用JAVA反射机制,当然,实际应用中,也可以采用能够完成该功能的其他反射机制。JAVA反射机制是动态获取信息以及动态调用对象的方法的功能,即在运行状态中,对于任意一个类,都能够知道该类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。其中,类是JAVA程序的组织单位,任何的JAVA语句,都要写在类文件中。
本发明实施例中,通过将mInstrumentation变量替换为所述组件的Activity的类名表示的变量,这样,可以通过替换的变量中包含的各方法进行组件所需的逻辑编程,从而可以通过该组件的Activity的application类的方法中,添加组件所需的逻辑,降低使用和维护组件的代价,同时能够有效提升组件开发效率。
作为一可选实施例,将组件的Activity的类名表示的变量记为CustomInstrumentation实例,新Application类的Application方法为组件的Application类的newApplication方法。由于替换了原来的mInstrumentation变量对应Activity的创建逻辑为:
CustomInstrumentation实例----->mInstrumentation----->newActivity。
A14,关联当前的组件的Activity与新Application类。
作为另一可选实施例,可以在组件的Activity的类名表示的变量的每一方法中,调用所述mInstrumentation变量对应的方法,即该方法还可以进一步包括:
在所述新Application类中,重写所述应用程序的ActivityThread实例的Instrumentation类中的handleActivityOnXXX方法,并在重写的handleActivityOnXXX方法中加入预先设置的组件逻辑。
本步骤中,重写是当一个子类继承一父类,而该子类中的方法与父类中的方法的名称、参数个数、类型都完全一致时,就称该子类中的方法重写了父类中的方法。当调用子类从父类继承并且重写的方法时是调用子类的实现,当调用子类从父类继承并且没有重写的方法时调用父类实现。
步骤103,触发所述Android操作系统调用所述应用程序的ActivityThread实例,并使所述ActivityThread实例通过所述组件的Activity的类名表示的变量中的callActivityOnXXX方法调用所述组件的Activity的onXXX方法。
本步骤中,通过触发CustomInstrumentation实例中的newApplication方法后,可以执行组件的逻辑。
作为一可选实施例,onXXX方法为onCreate方法。
本发明实施例中,在组件的Activity的onCreate方法被调用时,表示该组件的Activity已经启动(create)成功。
本发明实施例中,在Activity启动前,即新application类的onCreate方法,利用反射机制替换新Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量为预先自定义的CustomInstrumentation实例,并设置CustomInstrumentation实例的父类为Instrumentation变量以保证替换成功,并在CustomInstrumentation实例的每一方法中,调用原有mInstrumentation变量对应的方法。同时,为了后续切换的应用程序能正常运行,保存原应用程序的Application类中的mInstrumentation变量。
本发明实施例中,替换变量之后,调用逻辑如下:
........----->mInstrumentation------>.......
........----->CustomInstrumentation实例------>mInstrumentation------->......
本发明实施例中,callActivityOnXXX方法对应Activity的创建回调逻辑,较佳地,callActivityOnXXX方法为callActivityOnCreate方法,即:
CustomInstrumentation实例---->mInstrumentation------>callActivityOnCreate。
较佳地,该方法还可以进一步包括:
步骤104,在组件的Activity切换至应用程序的Activity时,调用所述组件的Activity的类名表示的变量的handleActivityOnResume方法,利用JAVA反射机制,将置空的应用程序的所述mApplication替换为保存的所述Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量。
本步骤中,通过预先保存所述Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量,可以在组件的Activity返回到应用程序的Activity时,Android操作系统调用CustomInstrumentation实例的handleActivityOnResume方法,利用JAVA反射机制,将置空的应用程序的application类的mBase变量的mApplication还原为保存的原有的mApplication,即Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量,以保证切换后的应用程序正常运行,操作如下:
CustomInstrumentation实例--->还原application类---->mInstrumentation----->handleActivityOnResume。
在还原mApplication后,Android操作系统触发应用程序顶层Activity的onResume方法,执行应用程序的Activity的启动检验流程。
由上述可见,本发明实施例的启动组件的界面的方法,在判断当前待启动的Activity为第一次启动的组件的Activity后,通过反射机制修改Android操作系统源码,将Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为所述组件的Activity的类名表示的变量,实现在组件中加入application类,并使组件中加入的application类能够正常运行,使得程序员开发组件与开发应用程序一样,能够在组件的启动阶段中加入需要的逻辑代码,无须再学习或创造一套类似功能的方法,极大减少程序员使用组件化的学习成本,使得可以按照应用程序的启动流程去启动组件的application类,实现组件开发接近应用程序的开发模式,减少程序员使用和维护组件的代价,从而有效提升组件开发效率。
图3为本发明实施例启动组件的界面的装置结构示意图。参见图3,该装置包括:监测处理模块201、变量替换模块202以及实例调用模块203,其中,
监测处理模块201,用于在应用程序的界面被创建之前,获取所述应用程序的界面的实例调用的所述应用程序的应用程序类的逻辑;
本发明实施例中,作为一可选实施例,监测处理模块201在监测到ActivityThread实例调用performLaunchActivity方法创建application类的逻辑后,判断当前待启动的Activity是否为第一次启动的组件的Activity,所述ActivityThread实例为应用程序接收到Android操作系统的通知后生成的。
本发明实施例中,ActivityThread实例管理所有UI事件,Android操作系统通过ActivityThread实例控制Activity的状态。
变量替换模块202,将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;
本发明实施例中,作为一可选实施例,变量替换模块202判断当前启动的Activity为第一次启动的组件的Activity,利用反射机制,将Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为所述组件的Activity的类名表示的变量,并设置所述组件的Activity的类名表示的变量的父类与所述mInstrumentation变量相同;
本发明实施例中,作为一可选实施例,反射机制为JAVA反射机制。组件的Activity的类名表示的变量继承于所述应用程序的ActivityThread实例的Instrumentation类。
实例调用模块203,使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。
本发明实施例中,作为一可选实施例,实例调用模块用于触发所述Android操作系统调用所述应用程序的ActivityThread实例,并使所述ActivityThread实例通过所述组件的Activity的类名表示的变量中的callActivityOnXXX方法调用所述组件的Activity的onXXX方法。
图4为本发明实施例启动组件的界面的装置另一结构示意图。参见图4,该装置除包括图3中的监测处理模块201、变量替换模块202以及实例调用模块203外,该装置还可以进一步包括:
界面切换处理模块204,用于在组件的Activity切换至应用程序的Activity时,调用所述组件的Activity的类名表示的变量的handleActivityOnResume方法,利用JAVA反射机制,将置空的应用程序的所述mApplication替换为保存的所述Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量。
其中,较佳地,变量替换模块202包括:确认单元41、置空单元42、创建单元43、变量替换单元44以及关联单元45,其中,
确认单元41,用于确定当前启动的Activity为第一次启动的组件的Activity,通知置空单元42;
置空单元42,用于利用JAVA反射机制,将应用程序的application类中的mBase变量的mApplication置空;
创建单元43,用于判断当前启动的Activity检查所述mApplication是否置空,如果置空,创建一新application类;
变量替换单元44,用于将新Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为所述组件的Activity的类名表示的变量;
本发明实施例中,通过分析android操作系统源码,采用反射机制,将分析得到的android操作系统源码中对应的应用程序Application类中的mBase变量的mPackageInfo变量的mMainThread变量的mInstrumentation变量替换为子类(CustomInstrumentation)。
关联单元45,用于关联当前的组件的Activity与新Application类。
作为另一可选实施例,变量替换模块202还可以进一步包括:
变量保存单元46,用于接收确认单元发送的通知,保存所述Application类中的mBase变量的mApplication中的mPackageInfo变量的mMainThread变量的mInstrumentation变量后,通知置空单元42。
作为再一可选实施例,变量替换模块202还可以进一步包括:
重写单元47,用于在变量替换后,在组件的Activity的类名表示的变量的每一方法中,调用所述mInstrumentation变量对应的方法。
本发明实施例中,在所述新Application类中,重写所述应用程序的ActivityThread实例的Instrumentation类中的handleActivityOnXXX方法,并在重写的handleActivityOnXXX方法中加入预先设置的组件逻辑。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种启动组件的界面的方法,其特征在于,该方法包括:
在应用程序的界面被创建之前,获取所述应用程序的界面的实例调用的所述应用程序的应用程序类的逻辑;
将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;
使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。
2.根据权利要求1所述的方法,其特征在于,所述将所述应用程序的应用程序类中的第一变量替换为第二变量包括:
确定当前启动的界面为第一次启动的组件的界面,利用反射机制,将应用程序类中的第一变量替换为所述组件的界面的类名表示的第二变量,并设置所述组件的界面的类名表示的第二变量的父类与所述第一变量相同。
3.根据权利要求2所述的方法,其特征在于,所述第一变量位于第一主线程变量中,所述第一主线程变量位于第一包信息变量中,所述第一包信息变量位于第一基础变量中,所述第一基础变量位于所述应用程序类中。
4.根据权利要求2所述的方法,其特征在于,所述使用所述组件的应用程序类的启动方法启动所述组件的应用程序类包括:
调用所述应用程序的界面线程实例,并使所述界面线程实例通过所述组件的界面的类名表示的第二变量中的方法调用所述组件的界面的方法,启动所述组件的应用程序类。
5.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
在组件的界面切换至应用程序的界面时,调用所述组件的界面的类名表示的第二变量的方法,利用JAVA反射机制,将置空的应用程序的第三变量替换为保存的所述应用程序类中的第一变量,所述第三变量为一空的所述应用程序的应用程序类的系统调用方法。
6.根据权利要求2所述的方法,其特征在于,所述利用反射机制,将应用程序类中的第一变量替换为所述组件的界面的类名表示的第二变量包括:
利用JAVA反射机制,将应用程序的应用程序类中的第三变量置空;
当前启动的界面检查所述第三变量是否置空,如果置空,创建一新应用程序类;
将新应用程序类中的第一变量替换为所述组件的界面的类名表示的变量;
关联当前的组件的界面与新应用程序类。
7.根据权利要求6所述的方法,其特征在于,所述方法进一步包括:
在所述新应用程序类中,重写所述应用程序的界面线程实例的方法,并在重写的方法中加入预先设置的组件逻辑。
8.一种启动组件的界面的装置,其特征在于,该装置包括:监测处理模块、变量替换模块以及实例调用模块,其中,
监测处理模块,用于在应用程序的界面被创建之前,获取所述应用程序的界面的实例调用的所述应用程序的应用程序类的逻辑;
变量替换模块,将所述应用程序的应用程序类中的第一变量替换为第二变量,所述第一变量包括所述应用程序的应用程序类的系统调用方法,所述第二变量包括所述组件的应用程序类的启动方法;
实例调用模块,使用所述组件的应用程序类的启动方法启动所述组件的应用程序类。
9.根据权利要求8所述的装置,其特征在于,所述变量替换模块包括:确认单元、置空单元、创建单元、变量替换单元以及关联单元,其中,
确认单元,用于确定当前启动的界面为第一次启动的组件的界面,通知置空单元;
置空单元,用于利用JAVA反射机制,将应用程序的应用程序类中的第三变量置空;
创建单元,当前启动的界面检查所述第三变量是否置空,如果置空,创建一新应用程序类;
变量替换单元,用于将新应用程序类中的第一变量替换为所述组件的界面的类名表示的第二变量;
关联单元,用于关联当前的组件的界面与新应用程序类。
10.根据权利要求9所述的装置,其特征在于,所述变量替换模块进一步包括:
变量保存单元,用于接收确认单元发送的通知,保存所述应用程序类中的第一变量后,通知置空单元。
11.根据权利要求9所述的装置,其特征在于,所述变量替换模块进一步包括:
重写单元,用于在变量替换后,在组件的界面的类名表示的第二变量的每一方法中,调用所述第一变量对应的方法。
12.根据权利要求8至11任一项所述的装置,其特征在于,所述装置进一步包括:
界面切换处理模块,用于在组件的界面切换至应用程序的界面时,调用所述组件的界面的类名表示的第二变量的方法,利用JAVA反射机制,将置空的应用程序的第三变量替换为保存的所述应用程序类中的第一变量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510548970.XA CN105045641B (zh) | 2015-08-31 | 2015-08-31 | 一种启动组件的界面的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510548970.XA CN105045641B (zh) | 2015-08-31 | 2015-08-31 | 一种启动组件的界面的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105045641A CN105045641A (zh) | 2015-11-11 |
CN105045641B true CN105045641B (zh) | 2018-09-25 |
Family
ID=54452205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510548970.XA Active CN105045641B (zh) | 2015-08-31 | 2015-08-31 | 一种启动组件的界面的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105045641B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106445595B (zh) * | 2016-09-23 | 2020-05-15 | 北京奇虎科技有限公司 | 插件的Application对象的构建方法及装置 |
CN106547564A (zh) * | 2016-11-15 | 2017-03-29 | 武汉斗鱼网络科技有限公司 | 一种基于反射机制的Android应用自动更新方法及系统 |
CN108304233B (zh) * | 2018-01-10 | 2022-02-08 | 武汉斗鱼网络科技有限公司 | Application对象迁移方法、存储介质、电子设备及系统 |
CN108958873B (zh) * | 2018-07-11 | 2021-08-20 | 阿里巴巴(中国)有限公司 | 状态栏沉浸式效果的配置方法、装置、介质和计算机设备 |
CN109783156B (zh) * | 2018-12-29 | 2021-11-16 | 奇安信科技集团股份有限公司 | 一种应用的启动控制方法及装置 |
-
2015
- 2015-08-31 CN CN201510548970.XA patent/CN105045641B/zh active Active
Non-Patent Citations (1)
Title |
---|
《Android Framework—Activity启动过程详解》;myfaxmail;《http://blog.chinaunix.net/uid-22028680-id-3384818.html》;20121025;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN105045641A (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105045641B (zh) | 一种启动组件的界面的方法及装置 | |
CN105468529A (zh) | 一种安卓应用ui控件精准遍历方法和装置 | |
US7934129B2 (en) | Network hang recovery | |
CN105183457A (zh) | 一种监听界面生命周期回调的方法及装置 | |
CN102955714B (zh) | 实现动态模拟远程接口的装置及方法 | |
CN106326099B (zh) | 一种用于程序跟踪的方法、装置及电子设备 | |
CN106648685A (zh) | 智能终端系统应用的处理方法、装置及智能终端 | |
CN109614153A (zh) | 多核芯片及系统 | |
CN111783018A (zh) | 一种页面处理方法、装置及设备 | |
CN108829391B (zh) | 一种Fragment中控件识别方法及系统 | |
US9870400B2 (en) | Managed runtime cache analysis | |
CN104484176B (zh) | 一种安卓系统窗口对象获取方法和装置 | |
CN109257196A (zh) | 一种异常处理方法及设备 | |
CN107239377A (zh) | 获取Java虚拟机运行状态的方法和装置 | |
CN109960658A (zh) | 应用程序编程接口测试方法、装置、电子设备及存储介质 | |
CN115688102A (zh) | 窗口的处理方法、装置、处理器及电子设备 | |
US20210110030A1 (en) | Container behavior representation | |
CN110309441A (zh) | 页面展示方法、装置和设备 | |
CN105630526A (zh) | 脚本的加载控制方法及装置 | |
CN104572199B (zh) | 一种禁止启动项启动的方法和装置 | |
CN113190445A (zh) | 接口测试方法、接口测试装置和接口测试系统 | |
CN105653389B (zh) | 一种数据诊断修复方法及装置 | |
CN110908866A (zh) | 软件监控方法及相关设备 | |
CN106200445B (zh) | 逻辑控制器的调试方法 | |
CN115952006B (zh) | 资源泄漏的检测方法、系统、装置、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |