一种启动界面的方法及装置的制造方法_3

文档序号:8942871阅读:来源:国知局
,因而,由 CustomInstrumentat1n 变量中的execStartActivity方法去实现启动请求的发送,由于CustomInstrumentat1n变量为注册的Activity的类名,因而,能够通过Android操作系统的校验。
[0061]当Android操作系统服务完成对启动Activity的启动请求的检验与一系列的操作以后,生成Activity的实例会交回应用程序去处理,即交由CustomInstrumentat1n变量(注册的Activity的类名)的newActivity方法去实现。本发明实施例中,由于需要启动的是未注册的Activity,需要应用程序生成未注册的Activity的实例,而依据Android操作系统返回的启动请求响应,应用程序将生成注册的Activity的实例,因而,在通过Android操作系统的合法性校验后,为了保证应用程序中未注册的Activity的正常运行,需要再将启动请求响应中包含的CustomInstrumentat1n变量替换为mlnstrumentat1n变量,从而实现由mlnstrumentat1n变量的newActivity方法去处理后续的启动,即在CustomInstrumentat1n变量的newActivity方法中,最后都应该转由mlnstrumentat1n变量的newActivity方法去处理。具体来说,通过将mlnstrumentat1n变量(ActivityB)替换为 CustomInstrumentat1n 变量(ActivityA)去执行校验,当Android操作系统完成对Activity(ActivityA)的启动请求的检验与一系列的操作以后,启动Activity(ActivityB)的合法性已经通过,生成Activity (ActivityA)的实例会交回应用程序去处理,即通过CustomInstrumentat1n变量的newActivity方法去实现,由于在校验成功后,已将 CustomInstrumentat1n 变量(ActivityA)替换为 mlnstrumentat1n 变量(ActivityB),因而,实际上是通过mlnstrumentat1n变量的newActivity方法去实现,即在newActivity方法中,将目标Activity由ActivityA替换为ActivityB,从而使得应用程序根据替换的mlnstrumentat1n变量的newActivity方法生成未注册的ActivityB的实例,并通过未注册的ActivityB的实例成功启动ActivityB。
[0062]本发明实施例中,在启动未注册的Activity后,后续执行的流程均为公知流程,例如,应用程序在请求Android操作系统启动Activity成功后,表示Activity的生命周期已开始。其中,Activity的每一生命周期对应一 Activity状态,Activity状态包括:仓!J建状态(onCreate方法)、启动状态(onStart方法)、重启动状态(onRestart方法)、显示(运行)状态(onResume方法)、暂停状态(onPause方法)、停止状态(onStop方法)以及销毁状态(onDestory方法)。其中,
[0063]当应用程序第一次调用一 Activity就会执行onCreate方法;
[0064]当Activity处于可见状态时就会调用onStart方法;
[0065]当Activity可以得到用户焦点时就会调用onResume方法;
[0066]当Activity没有被销毁时重新调用该Activity就会调用onRestart方法;
[0067]当Activity被遮挡住时就会调用onPause方法;
[0068]当Activity处于不可见状态时就会调用onStop方法;
[0069]当Activity被销毁时会调用onDestory方法。
[0070]在Activity的生命周期开始后,Android操作系统通过(android)应用程序上唯一的一 ActivityThread实例调用Activity的onXXX方法可以加入指定的逻辑。
[0071 ] 作为一可选实施例,该方法还可以进一步包括:
[0072]步骤104,在未注册的Activity成功启动后,触发Android操作系统调用所述应用程序的ActivityThread实例,并使所述ActivityThread实例通过所述未注册的Activity的实例中的handleActivityOnXXX方法调用Activity的onXXX方法。
[0073]本步骤中,handleActivityOnXXX方法包括 handleActivityOnCreate 方法以及handleActivityOnResume 方法。
[0074]由上述可见,本发明实施例启动界面的方法,利用java的反射机制修改Android操作系统源码,通过将未注册的Activity中的mlnstrumentat1n变量替换为已注册的Activity 的 CustomInstrumentat1n 变量,由于 CustomInstrumentat1n 变量为注册的Activity的类名,因而,能够通过Android操作系统的校验,在通过Android操作系统的合法性校验后,再将CustomInstrumentat1n变量替换为mlnstrumentat1n变量,从而使得应用程序根据替换的mlnstrumentat1n变量的newActivity方法生成未注册的Activity的实例,并通过未注册的ActivityB的实例成功启动ActivityB。从而实现只需要在AndroidManifest.xml文件中注册一 Activity,其他未注册的Activity都能通过本发明实施例的方法正常地启动起来。也就是说,本发明实施例的方法,使得Activity无需在AndroidManifest.xml文件中注册,可以应用到动态增加Activity的场景中,解决因不能动态修改AndroidManifest.xml文件的内容并让其生效而造成不能启动Activity的问题。例如,如果应用到制作应用程序插件的场景中,能够使得使用应用程序插件的开发商无须维护应用程序插件中所有的Activity注册信息,减少实现技术的工作量以及开发代价;同时,使用本发明实施例的学习代价很低,精简技术实现逻辑使技术更加容易修改维护,开发没有注册的Activity与开发正常的Activity完全一样。
[0075]图3为本发明实施例启动界面的装置结构示意图。参见图3,该装置包括:启动请求拦截模块201、变量替换校验模块202以及变量替换启动模块203,其中,
[0076]启动请求拦截模块201,用于在启动第一界面Activity时,获取向系统发送的启动请求,所述启动请求包括写入所述第一 Activity的类名的Intent类,所述第一 Activity的类名以一变量表示;
[0077]本发明实施例中,所述第一 Activity为未注册的Activity,所述第二 Activity为已注册的Activity。拦截应用程序在启动未注册的Activity时发送的启动请求,所述启动请求中,包含有写入该未注册的Activity的类名的Intent类,所述未注册的Activity的类名以一变量表不。
[0078]本发明实施例中,发送启动Activity的启动请求由mlnstrumentat1n变量中的execStartActivity方法实现,在应用程序将待启动的Activity的类名写入Intent类中生成启动请求之后,而该启动请求尚未被Android操作系统处理之前,拦截该启动请求。作为一可选实施例,通过监听execStartActivity方法来拦截启动请求。
[0079]变量替换校验模块202,用于将所述启动请求中以所述第一 Activity的类名表示的变量修改为以第二 Activity的类名表示的变量;
[0080]本发明实施例中,可以利用反射机制,将所述启动请求中以未注册的Activity的类名表示的变量替换为以一注册的Activity的类名表示的变量,并设置所述以一注册的Activity的类名表示的变量的父类与所述以未注册的Activity的类名表示的变量相同,以通过合法性校验。
[008
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1