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

文档序号:8942871阅读:来源:国知局
改为以第二Activity的类名表示的变量之后,所述方法进一步包括:
[0035]设置所述第二 Activity的类名表示的变量的父类与所述第一 Activity的类名表示的变量相同。
[0036]步骤13,将经过修改的所述启动请求发送给系统以启动所述第一 Activity。
[0037]本步骤中,所述将经过修改的所述启动请求发送给系统以启动所述第一 Activity包括:
[0038]将经过修改的所述启动请求发送给系统以进行合法性校验,拦截接收的通过合法性校验的启动请求响应,将所述启动请求响应中以所述第二 Activity的类名表示的变量替换为以所述第一 Activity的类名表示的变量,以使应用程序根据替换的变量生成所述第一 Activity的实例以启动所述第一 Activity。
[0039]图2为本发明实施例启动界面的方法具体流程示意图。参见图2,以第一 Activity为未注册的Activity,第二 Activity为已注册的Activity为例。该方法包括:
[0040]步骤101,拦截应用程序在启动未注册的Activity时发送的启动请求,所述启动请求中,包含有写入该未注册的Activity的类名的Intent类,所述未注册的Activity的类名以一变量表不;
[0041]本步骤中,应用程序在启动Activity时,将该待启动的Activity的类名写入Intent类中,然后将包含该Intent类的启动请求发送给Android操作系统,Android操作系统会接收启动请求后,对该启动请求执行一系列的检验,例如,如果启动请求中包含的Intent类中的Activity的类名没有在AndroidManifest.xml文件中注册,贝Ij检验失败,应用程序启动Activity失败。
[0042]作为一可选实施例,在应用程序将待启动的Activity的类名写入Intent类中生成启动请求之后,而该启动请求尚未被Android操作系统处理之前,拦截该启动请求。例如,可以在启动请求传输的过程中进行拦截,也可以是在启动请求到达Android操作系统之后,但未被Android操作系统处理之前进行拦截等。
[0043]本发明实施例中,变量是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问。
[0044]本发明实施例中,在Intent类中,变量为mlnstrumentat1n变量。在Android操作系统中,Activity的启动需要依靠Intent类。Intent类是对将要执行的动作抽象的描述,当Intent类用来启动Activity时,Intent类中包含将要启动的Activity的信息。
[0045]本发明实施例中,可以通过用户点击应用程序的图标触发应用程序启动未注册的Activity,在用户点击应用程序的图标后,触发在Android源代码工程的packages/experimental目录下创建一应用程序工程目录Activity,一般默认的应用程序工程目录Activity 定义在 src/shy/luo/Activity/MainActivity.java 文件中。
[0046]本发明实施例中,发送启动Activity的启动请求最后由mlnstrumentat1n变量中的execStartActivity方法实现,因而,作为一可选实施例,可通过监听execStartActivity方法来拦截启动请求。关于具体通过何种方式以及如何拦截启动请求为公知技术,在此略去详述。
[0047]进一步地,该方法还可以包括:
[0048]保存以所述mlnstrumentat1n变量表示的未注册的Activity的类名。
[0049]步骤102,利用反射机制,将所述启动请求中以未注册的Activity的类名表示的变量替换为以一注册的Activity的类名表示的变量,并设置所述以一注册的Activity的类名表示的变量的父类与所述以未注册的Activity的类名表示的变量相同,以通过合法性校验;
[0050]本步骤中,对于mlnstrumentat1n 变量,由于 mlnstrumentat1n 变量是Instrumentat1n类的实例,因而,设置的以一注册的Activity的类名表示的变量继承于该应用程序的Instrumentat1n类,即所述以一注册的Activity的类名表示的变量的父类与所述以未注册的Activity的类名表示的变量相同,这样,可以基于Activity校验的委托机制,可以由注册的Activity执行校验流程。
[0051]作为一可选实施例,以一注册的Activity的类名表示的变量可以称之为子类,该子类可以命名为CustoInstrumentat1n变量。
[0052]本发明实施例中,通过对应用程序启动Activity的流程分析,如果需要启动没有注册的Activity,需要使Android操作系统对启动请求检验成功。因而,本发明实施例中,考虑在AndroidManifest.xml文件中注册一第一 Activity (下面称该第一 Activity为ActivityA),在启动未注册的第二 Activity(下面称该第二 Activity为ActivityB,第二 Activity可以为一个或多个)时,在启动请求中,通过将写入Intent类中未注册的Activity的类名(第二 Activity的类名)替换为已注册的ActivityA的类名(第一Activity的类名),这样,由于ActivityA已在AndroidManifest.xml文件中注册,因而,可以通过校验。
[0053]本发明实施例中,作为一可选实施例,可以通过查询注册表信息,获取已注册的Activity的类名信息,并从获取的Activity的类名信息中,通过随机方式或非随机方式选取一注册的Activity的类名。
[0054]本发明实施例中,作为一可选实施例,利用反射机制,将所述启动请求中以未注册的Activity的类名表示的变量替换为以一注册的Activity的类名表示的变量包括:
[0055]分析android操作系统源码,采用反射机制,将应用程序Applicat1n类中的mBase变量的mPackagelnfo变量的mMainThread变量的mlnstrumentat1n变量替换为子类(CustomInstrumentat1n)。
[0056]本步骤中,较佳地,采用JAVA反射机制,当然,实际应用中,也可以采用能够完成该功能的其他反射机制。JAVA反射机制是动态获取信息以及动态调用对象的方法的功能,即在运行状态中,对于任意一个类,都能够知道该类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。其中,类是JAVA程序的组织单位,任何的JAVA语句,都要写在类文件中。
[0057]本发明实施例中,在应用程序启动Activity时,利用java的反射机制,将Applicat1n类中的mBase变量中的mPackagelnfo变量中的mMainThread变量中的mlnstrumentat1n变量(待启动的所述未注册的Activity的类名)替换为CustomInstrumentat1n变量(所述注册的Activity的类名),并设置CustomInstrumentat1n 变量的父类与 mlnstrumentat1n 变量相同,这样,使得 Android 操作系统能在后续流程中正常启动该待启动的未注册的Activity。
[0058]现有技术中,发送启动Activity的启动请求最后由mlnstrumentat1n变量中的execStartActivity方法实现,因而,作为一可选实施例,可通过监听execStartActivity方法来拦截启动请求。
[0059]步骤103,将拦截的经过更新的启动请求发送以进行合法性校验,拦截接收的通过合法性校验的启动请求响应,将所述启动请求响应中以所述注册的Activity的类名表示的变量替换为以所述未注册的Activity的类名表示的变量,以使应用程序根据替换的变量生成所述未注册的Activity的实例以启动所述未注册的Activity。
[0060]本步骤中,由于利用java的反射机制,已将mlnstrumentat1n变量替换为 CustomInstrumentat1n 变量
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1