插件的Application对象的构建方法及装置制造方法及图纸

技术编号:14694971 阅读:76 留言:0更新日期:2017-02-23 19:08
本发明专利技术提供了一种插件的Application对象的构建方法及装置,该方法包括:监测插件的启动事件,当监测到插件启动时,判断是否存在自定义的Application类;若存在自定义的Application类,则构建所述自定义的Application类的Application对象作为所述插件的Application对象,并缓存;以及构建系统的Application对象作为所述插件的Application对象。本发明专利技术实施例在插件启动时,自动构建插件的Application对象,从而实现插件对Application特性的利用,适配性非常好,能够做到像直接安装在Android上的应用那样来声明和使用。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别是一种插件的Application对象的构建方法及装置
技术介绍
Application类和Activity、Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,如果在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity、Service中获得的对象都是同一个对象。因而,可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。基于Android的开发中,如系统、应用程序、插件等开发,使用Application对象的场景极多(尤其通过Context.getApplicationContext方法来获取的),涵盖:获取资源、使用Handler、防止内存泄露等等。在现有的方案中,只能获取主程序的Application对象,而许多插件拿到Application对象后,会尝试获取“插件”的资源。而又因为Application对象是主程序的,只能获取到“主程序”的资源,这样就会出现找不到资源而崩溃的问题。若要解决上述问题,按照现有方案而言,需要将所有调用Context.getApplicationContext的地方,都改成自定义的方法,来直接获取插件自定义的Context对象。然而,其缺点是需要修改源代码,若代码不在自己手中,则就无法进行修改。综上所述,专利技术人发现亟待提供一种有效地构建插件的Application对象的方案。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的插件的Application对象的构建方法及相应的装置。依据本专利技术的一方面,提供了一种插件的Application对象的构建方法,包括:监测插件的启动事件,当监测到插件启动时,判断是否存在自定义的Application类;若存在自定义的Application类,则构建所述自定义的Application类的Application对象作为所述插件的Application对象,并缓存;以及构建系统的Application对象作为所述插件的Application对象。可选地,构建所述自定义的Application类的Application对象,包括:通过反射来构建所述自定义的Application类的Application对象。可选地,当插件启动时,判断是否存在自定义的Application类,包括:预先定义插件的自定义类,所述自定义类中包括多个方法;当插件启动时,调用所述自定义类的第一方法,判断是否存在自定义的Application类。可选地,调用所述自定义类的第一方法,判断是否存在自定义的Application类,包括:调用所述自定义类的第一方法,获取ApplicationInfo对象,所述ApplicationInfo对象用来记录插件的AndroidManifest.xml中自定义的Application类信息;通过所述ApplicationInfo对象来获取className,若获取到className,则确定存在自定义的Application类。可选地,所述ApplicationInfo对象存储在所述自定义类中的mApplicationInfo字段。可选地,缓存构建的所述自定义的Application类的Application对象,包括:获取所述自定义类的对象;通过所述自定义类的对象,将所述构建的所述自定义的Application类的Application对象缓存至所述自定义类中的mApplication字段。可选地,获取所述自定义类的对象,包括:查找缓存数据,判断是否创建过所述自定义类的对象;若是,则直接从所述缓存数据中获取所述自定义类的对象;若否,则创建所述自定义类的对象。可选地,查找缓存数据,判断是否创建过所述自定义类的对象,包括:调用所述自定义类的第一方法,查找缓存数据,判断是否创建过所述自定义类的对象,其中,所述自定义类的第一方法为静态变量。可选地,在创建所述自定义类的对象之后,所述方法还包括:判断是否成功创建所述自定义类的对象;若是,则缓存所述自定义类的对象。可选地,所述方法还包括:调用所述插件的Application对象的attachBaseContext方法;和/或调用所述插件的Application对象的onCreate方法。可选地,所述方法还包括:在所述插件中声明所述插件的Application对象。可选地,所述方法还包括:在主程序中声明自定义的Application对象;在主程序自定义的Application对象中收到系统的回调方法;遍历已经存在的所述自定义类的对象;通过所述自定义类的对象调用与所述回调方法对应的方法。可选地,在主程序中声明自定义的Application对象,包括:创建一个类继承Application类;在主程序的AndroidManifest.xml文件中的application标签中进行注册。可选地,所述方法还包括:在插件的Context对象中重新复写getApplicationContext方法,返回所述插件的Application对象。依据本专利技术的另一方面,还提供了一种插件的Application对象的构建装置,包括:监测模块,适于监测插件的启动事件;判断模块,适于当监测到插件启动时,判断是否存在自定义的Application类;第一构建模块,适于若存在自定义的Application类,则构建所述自定义的Application类的Application对象作为所述插件的Application对象,并缓存;以及第二构建模块,适于构建系统的Application对象作为所述插件的Application对象。可选地,所述第一构建模块还适于:通过反射来构建所述自定义的Application类的Application对象。可选地,所述装置还包括:定义模块,适于预先定义插件的自定义类,所述自定义类中包括多个方法;所述判断模块,还适于当插件启动时,调用所述自定义类的第一方法,判断是否存在自定义的Application类。可选地,所述判断模块还适于:调用所述自定义类的第一方法,获取ApplicationInfo对象,所述ApplicationInfo对象用来记录插件的AndroidManifest.xml中自定义的Application类信息;通过所述ApplicationInfo对象来获取className,若获取到classN本文档来自技高网
...
插件的Application对象的构建方法及装置

【技术保护点】
一种插件的Application对象的构建方法,包括:监测插件的启动事件,当监测到插件启动时,判断是否存在自定义的Application类;若存在自定义的Application类,则构建所述自定义的Application类的Application对象作为所述插件的Application对象,并缓存;以及构建系统的Application对象作为所述插件的Application对象。

【技术特征摘要】
1.一种插件的Application对象的构建方法,包括:监测插件的启动事件,当监测到插件启动时,判断是否存在自定义的Application类;若存在自定义的Application类,则构建所述自定义的Application类的Application对象作为所述插件的Application对象,并缓存;以及构建系统的Application对象作为所述插件的Application对象。2.根据权利要求1所述的方法,其中,构建所述自定义的Application类的Application对象,包括:通过反射来构建所述自定义的Application类的Application对象。3.根据权利要求1或2所述的方法,其中,当插件启动时,判断是否存在自定义的Application类,包括:预先定义插件的自定义类,所述自定义类中包括多个方法;当插件启动时,调用所述自定义类的第一方法,判断是否存在自定义的Application类。4.根据权利要求3所述的方法,其中,调用所述自定义类的第一方法,判断是否存在自定义的Application类,包括:调用所述自定义类的第一方法,获取ApplicationInfo对象,所述ApplicationInfo对象用来记录插件的AndroidManifest.xml中自定义的Application类信息;通过所述ApplicationInfo对象来获取className,若获取到className,则确定存在自定义的Application类。5.根据权利要求4所述的方法,其中,所述ApplicationInfo对象存储在所述自...

【专利技术属性】
技术研发人员:张炅轩宋照春
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1