一种Android程序的流式执行方法

文档序号:6539849阅读:172来源:国知局
一种Android程序的流式执行方法
【专利摘要】本发明公开了一种Android程序的流式执行方法,将Android程序分解成功能独立的被调用程序单元模块,被调用程序单元模块存储于服务器上,利用下载模块从服务器下载被调用程序单元模块及图片到手机SD卡,由缓存管理模块记录已下载的被调用程序单元模块及图片文件的存储路径,利用流式执行模块依次从缓存管理模块获取被调用程序单元模块和图片的存储路径,通过动态加载模块依据被调用程序单元模块的存储路径动态加载被调用程序单元模块的Activity并生成实例,由流式执行模块控制上一步生成的Activity实例运行,从而完成程序的执行;利用该方法按需下载被调用程序单元模块和图片资源即可开始运行,免除安装过程,缩短用户下载程序安装包的时间,改善了用户使用程序的方式。
【专利说明】一种Android程序的流式执行方法
【技术领域】
[0001 ] 本发明涉及插件处理【技术领域】,特别是涉及一种Android程序的流式执行方法。【背景技术】
[0002]目前,Android系统已成为市场占有率最高的智能手机操作系统。一个Android程序通常由多个Activity (Android中负责产生用户界面,处理用户事件的组件)组成,各Activity彼此独立,通过Android系统传递参数协同工作。Android程序必须有一个Activity被指定为主Activity,它是程序启动时首先显示的界面。一个Android程序中的每个Activity都可以通过Android系统启动其它的Activity。每当一个Activity被启动时,前一个Activity就被停止并放入Android系统维护的一个栈中。在当前活动的Activity上触发返回键,该Activity被销毁,然后上一个Activity从栈中被恢复。当一个Activity因为新的Activity启动而被停止时,它会收到自身状态变化的通知,这样的变化有多个,如创建、停止、恢复和销毁,每个状态变化都会弓I起Android系统调用一个相应的回调方法(onCreate (Bundle)、onStart ( )> onResume ()、onPause ()、onStop ()和onDestroy ()等方法)以通知Activity,这些回调方法被统称为“生命周期回调方法”。这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。
[0003]Android程序以APK (Android Package)格式程序安装包形式发布,安装包里包括所有程序代码和运行所需资源(如图片文件,音频文件等)。常用Android程序功能都比较丰富,APK安装包的体积不断增大。尤其是手机游戏等娱乐程序,为了提供更好的界面效果和用户体验,使用了大量的图片,甚至占据了 APK安装包体积的一半以上。对于试用的程序(如新发布的游戏程序)和使用频率很低的程序(如景点导航程序),强制用户花费较长的时间下载APK安装包,经历繁琐复杂的安装和卸载过程,这严重损害了用户体验。
[0004]JavaWJDKLO (Java开发工具包)就开始提供类加载器,使得Java类可以被动态加载到Java虚拟机中执行。Android也提供了 DexClassLoader类用以实现从APK安装包动态加载Java类到Android Dalvik虚拟机,然后可利用Java反射机制动态创建Java类的实例并运行。

【发明内容】

[0005]本发明提供了一种Android程序的流式执行方法,其目的在于克服现有技术中Android程序由于所占空间较大,导致用户下载程序安装包时间长,程序安装卸载过程繁杂,使用频率较低的程序浪费手机存储空间的问题。
[0006]一种Android程序的流式执行方法,将Android程序分解成功能独立的被调用程序单元模块,被调用程序单元模块存储于服务器上,利用下载模块从服务器下载被调用程序单元模块及图片到手机SD卡,由缓存管理模块记录已下载的被调用程序单元模块及图片文件的存储路径,利用流式执行模块依次从缓存管理模块获取被调用程序单元模块和图片的存储路径,通过动态加载模块依据被调用程序单元模块的存储路径动态加载被调用程序单元模块的Activity并生成实例,由流式执行模块控制上一步生成的被调用程序单元模块的Activity实例运行,从而完成程序的执行;
[0007]所述被调用程序单元模块是只包含Android程序中一个Activity的APK安装包,按以下要求编写Activity并进行编译获得:
[0008]I)在Activity中添加两个成员变量,分别用于保存对流式执行模块实例的引用和对本Activity的用户界面实例的引用;
[0009]2)用流式执行模块实例的引用作为Activity的Context实例的引用,即Activity中需要Context实例引用的代码传入流式执行模块实例引用;Activity中加载图片的功能通过调用流式执行模块实例的图片加载函数生成Drawable实例来实现;
[0010]3)在Activity的onCreate (Bundle)方法中,将显示用户界面的代码替换为保存用户界面实例的引用到Activity的成员变量的代码,并在Activity的onResume ()方法中添加显示用户界面的代码;
[0011]4)添加四个函数,分别定义为创建函数、恢复函数、停止函数以及销毁函数:
[0012]5)创建函数以流式执行模块实例的引用作为参数,保存流式执行模块实例的引用到Activity的成员变量,并调用Activity的onCreate (Bundle)函数;
[0013]恢复函数用来调用Activity的onStart ()函数和onResume ()函数;
[0014]停止函数用来调用Activity的onPause ()函数和onStop ()函数;
[0015]销毁函数用来调用Activity的onDestroy ()函数。
[0016]所述流式执行模块对按以下要求编写的一个Activity进行编译获得:
[0017]I)新建一个Activity,并在Activity中添加四个成员变量,分别用于保存正运行的被调用程序单元模块的Activity实例、前一个被调用程序单元模块的Activity实例传递给后一个被调用程序单元模块的Activity实例的参数、后一个运行完成的被调用程序单元模块的Activity实例返回给前一个被调用程序单元模块的Activity实例的结果以及在正运行的被调用程序单元模块的Activity实例之前运行过且未被销毁的被调用程序单元模块的Activity实例;
[0018]2)在新建的Activity的onCreate (Bundle)函数中初始化添加的四个成员变量,从Bundle中取得需要执行的被调用程序单元模块的标示符,调用动态加载函数;
[0019]在onResume ()函数中调用当前运行的被调用程序单元模块的Activity实例的恢复函数;
[0020]在onStop ()函数中调用当前运行的被调用程序单元模块的Activity实例的停止函数;
[0021]3)在新建的Activity中添加动态加载函数,动态加载函数根据传入的被调用程序单元模块的标示符调用动态加载模块生成被调用程序单元模块的Activity实例并将生成的被调用程序单元模块的Activity实例保存在成员变量中,调用上一步生成的被调用程序单元模块实例的创建函数;
[0022]4)在新建的Activity中添加图片加载函数,图片加载函数根据传入的图片的标不符,利用Android的BitmapFactory类生成Drawable实例;
[0023]5)在新建的Activity中添加跳转函数,跳转函数调用当前运行的被调用程序单元模块的Activity实例的停止函数,根据传入的被调用程序单元模块的标示符调用动态加载函数,并调用新生成被调用程序单元模块的Activity的恢复函数;
[0024]6)在新建的Activity中添加回退函数,回退函数调用当前运行的被调用程序单元模块的Activity实例的停止函数和销毁函数,从流式执行模块成员变量中获取前一个运行的被调用程序单元模块的Activity实例并保存在成员变量中,调用前一个运行的被调用程序单元模块的Activity实例的恢复函数;
[0025]7)在新建的Activity中添加参数设置函数和参数获取函数,参数设置函数将传入的键值对形式参数保存在成员变量中,参数获取函数根据传入的参数从成员变量中取出对应的值。这对函数用于被调用程序单元模块的Activity实例间传递参数;
[0026]8)在新建的Activity中添加结果设置函数和结果获取函数,结果设置函数将传入的键值对形式参数保存在成员变量中,,结果获取函数根据传入的参数从成员变量中取出对应的值。这对函数用于被调用程序单元模块的Activity实例间传递结果。
[0027]所述下载模块采用HTTP协议实现的程序库进行资源文件的下载。
[0028]利用Java集合库中的HashMap实现缓存管理。
[0029]所述被调用程序单元模块的标示符为统一资源定位符URL。
[0030]所述动态加载模块是基于Java的反射机制,利用Android提供的DexClassloader加载器动态加载被调用程序单元模块并创建Activity实例。
[0031]有益效果
[0032]本发明提供了一种Android程序的流式执行方法,其优点具体体现在以下几个方面:
[0033]I)将Android程序分解成功能独立的被调用程序单元模块,每个被调用程序单元模块以APK安装包的形式存储,将原本一个应用程序分散到了多个安装包中,由于每个安装包的大小远小于一个应用程序的安装包大小,从而减少了单次进行应用程序安装包下载的数据量;
[0034]2)将图片从应用程序安装包中分离出来,利用流式执行模块提供的图片加载函数动态从服务器获取图片生成Drawable对象,在动态加载被调用程序单元时引用对应图片资源,进一步减少了单次下载的数据量,加快了程序加载运行速度;
[0035]3)按需流式加载程序,减少用户等待程序下载的时间,免除安装过程,且只有被执行的程序模块才会被下载,不被使用的模块不会被下载,改善用户体验。
【专利附图】

【附图说明】
[0036]图1为本发明所述方法的示意图;
[0037]图2为流式执行模块的定义示意图;
[0038]图3为被调用程序单元模块的定义示意图;
【具体实施方式】
[0039]下面将结合附图和实施例对本发明作进一步的补充说明。
[0040]如图1所示,一种An droid程序的流式执行方法,将An droid程序分解成功能独立的被调用程序单元模块,被调用程序单元模块存储于服务器上,利用下载模块从服务器下载被调用程序单元模块及图片到手机SD卡,由缓存管理模块记录已下载的被调用程序单元模块及图片文件的存储路径,利用流式执行模块依次从缓存管理模块获取被调用程序单元模块和图片的存储路径,通过动态加载模块依据被调用程序单元模块的存储路径动态加载被调用程序单元模块的Activity并生成实例,由流式执行模块控制上一步生成的被调用程序单元模块的Activity实例运行,从而完成程序的执行;
[0041]所述被调用程序单元模块是只包含Android程序中一个Activity的APK安装包,如图2所示编写Activity的子类CalledActivity并进行编译获得,具体要求如下:
[0042]I)在CalledActivity中添加两个成员变量,ca用于保存对流式执行模块实例的引用,view用于保存对本Activity的用户界面实例的引用;
[0043]2)用ca作为Activity的Context实例的引用,即Activity中需要Context实例引用的代码传入ca, Activity中加载图片的功能通过调用CallActivity实例的1adImage(Uri)函数生成Drawable实例来实现;
[0044]3)在Activity的onCreate (Bundle)方法中,将显示用户界面的代码替换为保存用户界面实例的引用到view的代码,并在Activity的onResume ()方法中添加ca.setContent(view);
[0045]4)添加四个函数,分别为创建函数create (CallActivity)、恢复函数resume O、停止函数stop O以及销毁函数destroy O:
[0046]5)创建函数以CallActivity实例的引用作为参数,保存CallActivity的引用到ca,并调用 Activity 的 onCreate (Bundle)函数;
[0047]恢复函数用来调用Activity的onStart ()函数和onResume ()函数;
[0048]停止函数用来调用Activity的onPause ()函数和onStop ()函数;
[0049]销毁函数用来调用Activity的onDestroy ()函数。
[0050]如图1中,应用程序A被分解成3个被调用程序单元模块,即3个程序子安装包;应用程序B被分解成4个被调用程序单元模块,即4个程序子安装包。
[0051]在执行程序A时,利用流式执行模块按需下载并加载应用程序A中的程序子安装包运行。假设程序A是一个短信程序,它包括短信列表单元模块用于显示短信列表,短信编辑单元模块用于编辑发送短信,短信显示单元模块用于显示短信的具体内容。流式执行模块首先下载短信列表单元模块所在的子安装包并动态加载执行;当用户点击短信列表模块上某条短信时,流式执行模块按需用服务器下载短信显示单元模块所在的子安装包并动态加载执行,显示用户刚才点击短信的具体内容。如果用户不需要编辑短信,流式执行模块则不会从服务器下载短信编辑模块所在的子安装包。当一个Android程序拥有大量功能模块,而用户只需要使用少数模块时(如微信,最常用的也就是语聊模块),系统不会耗费多余资源加载其它未使用的功能模块。进一步的,缓存管理模块可以避免常用单元模块的再次下载,更进一步的,可以在缓存管理模块中采用预取技术,在程序当前单元模块运行时从服务器下载即将执行的单元模块所在子安装包,加快程序响应速度。
[0052]所述流式执行模块如图3所示编写Activity的子类CallActivity并进行编译获得,具体要求如下:
[0053]I)新建一个CallActivity,并在CallActivity中添加四个成员变量,curActivity用于保存正运行的CalledActivity实例、request用于保存前一个CalledActivity实例传递给后一个CalledActivity实例的参数、result用于保存后一个运行完成的CalledActivity实例返回给前一个CalledActivity实例的结果,stack用于保存在正运行的CalledActivity实例之前运行过且未被销毁的CalledActivity实例;
[0054]2)在新建的CallActivity的onCreate (Bundle)函数中初始化添加的四个成员变量,从Bundle中取得需要执行的被调用程序单元模块的标示符,调用动态加载函数1adCalledActivity (Uri);
[0055]在onResume ()函数中调用当前运行CalledActivity实例的恢复函数resume
O;
[0056]在onStop ()函数中调用当前运行CalledActivity实例的停止函数stop ();
[0057]3)在新建的 CallActivity 中添加动态加载函数 1adCalledActivity (Uri),动态加载函数根据传入的被调用程序单元模块的标示符调用动态加载模块生成CalledActivity实例并生成的CalledActivity实例保存在成员变量curActivity中,调用curActivity.create(this);
[0058]4)在新建的CalledActivity中添加图片加载函数1adImage (Uri),图片加载函数根据传入的图片的标示符,利用Android的BitmapFactory类生成Drawable实例;
[0059]5)在新建的CalledActivity中添加跳转函数startActivity (Uri),跳转函数调用
[0060]curActivity.stop (),根据传入的被调用程序单元模块的标示符调用1adCalledActivity (Uri),并调用 curActivity.resume ();
[0061]6)在新建的CallActivity中添加回退函数back(),回退函数调用curActiviy.stop O 和 curActivity.destroy O ,从 stack 中获取前一个运行的 CalledActivity 实例并保存在 curActivity 中,调用 curActivity.resume O ;
[0062]7)在新建的 CallActivity 中添加参数设置函数 setRequestParameter (String,Object)和参数获取函数getRequest (String),参数设置函数将传入的键值对形式参数保存在request中,参数获取函数根据传入的参数从request中取出对应的值。这对函数用于在CalledActivity实例间传递参数;
[0063]8)在新建的 CalledActivity 中添加结果设置函数 setResult (String, Object)和结果获取函数getResult(String),结果设置函数将传入的键值对形式参数保存在result中,,结果获取函数根据传入的参数从result中取出对应的值。这对函数用于在CalledActivity实例间传递结果。
[0064]利用Java集合库中的HashMap实现缓存管理。
[0065]所述被调用程序单元模块的标示符为统一资源定位符URL。
[0066]所述动态加载模块是基于Java的反射机制,利用Android提供的DexClassloader加载器动态加载被调用程序单元模块并创建Activity实例。
[0067]根据上述实例提供的方法,实现了在Android平台上对Android程序进行流式执行,按需下载被调用程序单元模块,跳过了繁杂的安装步骤,缩短用户下载程序安装包的时间,改善了用户体验。
[0068]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。
【权利要求】
1.一种Android程序的流式执行方法,其特征在于,将Android程序分解成功能独立的被调用程序单元模块,被调用程序单元模块存储于服务器上,利用下载模块从服务器下载被调用程序单元模块及图片到手机SD卡,由缓存管理模块记录已下载的被调用程序单元模块及图片文件的存储路径,利用流式执行模块依次从缓存管理模块获取被调用程序单元模块和图片的存储路径,通过动态加载模块依据被调用程序单元模块的存储路径动态加载被调用程序单元模块的Activity并生成实例,由流式执行模块控制上一步生成的Activity实例运行,从而完成程序的执行; 所述被调用程序单元模块是只包含Android程序中一个Activity的APK安装包,按以下要求编写Activity并进行编译获得: 1)在Activity中添加两个成员变量,分别用于保存对流式执行模块实例的引用和对本Activity的用户界面实例的引用; 2)用流式执行模块实例的引用作为Activity的Context实例的引用,即Activity中需要Context实例引用的代码传入流式执行模块实例引用;Activity中加载图片的功能通过调用流式执行模块实例的图片加载函数生成Drawable实例来实现; 3)在Activity的onCreate(Bundle)方法中,将显示用户界面的代码替换为保存用户界面实例的引用到Activity的成员变量的代码,并在Activity的onResume ()方法中添加显示用户界面的代码; 4)添加四个函数,分别定义为创建函数、恢复函数、停止函数以及销毁函数: 5)创建函数以流式执行模块实例的引用作为参数,保存流式执行模块实例的引用到Activity 的成员变量, 并调用 Activity 的 onCreate (Bundle)函数; 恢复函数用来调用Activity的onStart ()函数和onResume ()函数; 停止函数用来调用Activity的onPause ()函数和onStop ()函数; 销毁函数用来调用Activity的onDestroy ()函数。
2.根据权利要求1所述的Android程序的流式执行方法,其特征在于,所述流式执行模块对按以下要求编写的一个Activity进行编译获得: 1)新建一个Activity,并在Activity中添加四个成员变量,分别用于保存正运行的被调用程序单元模块的Activity实例、前一个被调用程序单元模块的Activity实例传递给后一个被调用程序单元模块的Activity实例的参数、后一个运行完成的被调用程序单元模块的Activity实例返回给前一个被调用程序单元模块的Activity实例的结果以及在正运行的被调用程序单元模块的Activity实例之前运行过且未被销毁的被调用程序单元模块的Activity实例; 2)在新建的Activity的onCreate(Bundle)函数中初始化添加的四个成员变量,从Bundle中取得需要执行的被调用程序单元模块的标示符,调用动态加载函数; 在onResume ()函数中调用当前运行的被调用程序单元模块的Activity实例的恢复函数; 在onStop ()函数中调用当前运行的被调用程序单元模块的Activity实例的停止函数; 3)在新建的Activity中添加动态加载函数,动态加载函数根据传入的被调用程序单元模块的标示符调用动态加载模块生成被调用程序单元模块的Activity实例并将生成的被调用程序单元模块的Activity实例保存在成员变量中,调用上一步生成的被调用程序单元模块实例的创建函数; 4)在新建的Activity中添加图片加载函数,图片加载函数根据传入的图片的标示符,利用 Android 的 BitmapFactory 类生成 Drawable 实例; 5)在新建的Activity中添加跳转函数,跳转函数调用当前运行的被调用程序单元模块的Activity实例的停止函数,根据传入的被调用程序单元模块的标示符调用动态加载函数,并调用新生成被调用程序单元模块的Activity的恢复函数; 6)在新建的Activity中添加回退函数,回退函数调用当前运行的被调用程序单元模块的Activity实例的停止函数和销毁函数,从流式执行模块成员变量中获取前一个运行的被调用程序单元模块的Activity实例并保存在成员变量中,调用前一个运行的被调用程序单元模块的Activity实例的恢复函数; 7)在新建的Activity中添加参数设置函数和参数获取函数,参数设置函数将传入的键值对形式参数保存在成员变量中,参数获取函数根据传入的参数从成员变量中取出对应的值。这对函数用于被调用程序单元模块的Activity实例间传递参数; 8)在新建的Activity中添加结果设置函数和结果获取函数,结果设置函数将传入的键值对形式参数保存在成员变量中,,结果获取函数根据传入的参数从成员变量中取出对应的值。这对函数用于被调用程序单元模块的Activity实例间传递结果。
3.根据权利要求2所述的Android程序的流式执行方法,其特征在于,所述下载模块采用Android的HttpClient进行 资源文件的下载。
4.根据权利要求3所述的Android程序的流式执行方法,其特征在于,利用Java集合库中的HashMap实现缓存管理。
5.根据权利要求4所述的Android程序的流式执行方法,其特征在于,所述被调用程序单元模块的标示符为统一资源定位符URL。
6.根据权利要求1-5任一项所述的Android程序的流式执行方法,其特征在于,所述动态加载模块是基于Java的反射机制,利用Android提供的DexClassloader加载器动态加载被调用程序单元模块并创建Activity实例。
【文档编号】G06F9/445GK103793257SQ201410083601
【公开日】2014年5月14日 申请日期:2014年3月7日 优先权日:2014年3月7日
【发明者】张尧学, 王国军, 徐旸, 陈建二, 王洁 申请人:中南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1