应用程序升级方法及装置
技术领域
本公开涉及软件技术领域,尤其涉及一种应用程序升级方法及装置。
背景技术
终端设备的应用程序升级过程中,存在一些需要解决的问题。以安卓(Andriod)系统为例,安卓系统是谷歌推出的移动终端操作系统,作为移动设备的操作系统,安卓系统以其开源的特性,成为了主流的操作系统之一。安卓系统的软件安装包格式为APK(AndroidPackage,Android安卓安装包)格式,已被广大开发者进行了广泛的应用。安卓系统在软件升级过程中通常需要整体重新进行安装更新,使得用户需要花费大量时间和大量资源进行更新,而最后仅仅是增加了一部分很少的内容,资源浪费多,用户体验差。
发明内容
有鉴于此,本公开提出了一种应用程序升级方法及装置,以解决安卓系统应用程序升级过程中,资源浪费的问题。
根据本公开的一方面,提供了一种应用程序升级方法,所述方法包括:
在启动应用程序后的用户进程中,判断是否有所述应用程序的升级文件;
在确定有升级文件的情况下,利用代理组件替换所述升级文件对应的目标组件,所述代理组件为已经通过系统验证的组件;
在系统进程中,利用所述代理组件进行系统验证;
返回用户进程,利用所述目标组件替换所述代理组件;
根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,判断是否有升级文件,包括:
通过检索升级文件目录判断是否有升级文件,或
通过升级标识信息判断是否有升级文件。
在一种可能的实现方式中,所述代理组件注册在全局配置文件中。
在一种可能的实现方式中,根据所述升级文件更新所述目标组件,包括:
根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。
在一种可能的实现方式中,所述方法还包括:
将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件;
根据所述升级文件更新所述目标组件,得到升级后的应用程序,包括:
根据所述统一资源文件,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,根据所述升级文件更新所述目标组件,包括:
获取升级代码的地址信息;
根据所述升级文件更新所述目标组件,得到升级后的应用程序,包括:
根据升级代码的地址信息,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
根据本公开的另一方面,提供了一种应用程序升级装置,包括:
升级文件判断模块,用于在启动应用程序后的用户进程中,判断是否有所述应用程序的升级文件;
第一替换模块,用于在确定有升级文件的情况下,利用代理组件替换所述升级文件对应的目标组件,所述代理组件为已经通过系统验证的组件;
验证模块,用于在系统进程中,利用所述代理组件进行系统验证;
第二替换模块,用于返回用户进程,利用所述目标组件替换所述代理组件;
更新模块,用于根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,所述升级文件判断模块,包括:
第一判断子模块,用于通过检索升级文件目录判断是否有升级文件,或
第二判断子模块,用于通过升级标识信息判断是否有升级文件。
在一种可能的实现方式中,所述代理组件注册在全局配置文件中。
在一种可能的实现方式中,所述更新模块,包括:
注入子模块,用于根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。
在一种可能的实现方式中,该装置还包括:
资源统一标识模块,用于将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件;
所述更新模块,包括:
第一更新子模块,用于根据所述统一资源文件,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,该装置还包括:
升级代码地址信息获取模块,用于获取升级代码的地址信息;
所述更新模块,包括:
第二更新子模块,用于根据升级代码的地址信息,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
根据本公开的另一方面,提供了一种应用程序升级装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述应用程序升级方法。
根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述应用程序升级方法。
在启动应用程序后的用户进程中,判断出有应用程序的升级文件后,利用代理组件替换所述升级文件对应的目标组件,利用代理组件在系统进程中通过系统验证后,返回用户进程,再利用目标组件替换所述代理组件,最后根据所述升级文件更新所述目标组件,得到升级后的应用程序。本公开由代理组件替换需要升级的目标组件完成系统验证,使得目标组件可以进行免安装升级,节省系统资源。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出根据本公开一实施例的应用程序升级方法的流程图;
图2示出根据本公开一实施例的应用程序升级方法的流程图;
图3示出根据本公开一实施例的应用程序升级方法的流程图;
图4示出根据本公开一实施例的应用程序升级方法的流程图;
图5示出根据本公开一实施例的安卓系统资源查找的流程图;
图6示出根据本公开一实施例的安卓系统中资源管理框架根据顺序查找资源的流程图;
图7示出根据本公开一实施例的组件启动流程图;
图8示出传统的应用程序升级流程图;
图9示出根据本公开一实施例的应用程序升级流程图;
图10示出根据本公开一实施例的应用程序升级装置的框图;
图11示出根据本公开一实施例的应用程序升级装置的框图;
图12示出根据本公开一实施例的应用程序升级装置的框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
本公开提供的应用程序升级方法,可应用于安卓系统。安卓系统上的开发者套件简称为SDK(Software Development Kit,软件开发工具包),安卓系统应用程序的软件安装包格式为APK格式。其中,SDK是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。安卓系统中的应用程序,通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件被SDK编译的工程打包成一个安装程序文件,格式为.apk。
APK的源代码包括:Java源代码、Android Mainfest.xml文件、资源文件。其中,Java源代码为系统运行的可执行文件。Android Mainfest.xml文件是APK的全局配置文件,位于APK的根目录下,描述了APK中的全局数据,包括组件、组件各自的实现类、各种能被处理的数据和启动位置等重要信息。资源文件包括动画文件、图像资源、布局文件、特征值、颜色值、尺寸值、字符串的值、样式对象等供APK调用的资源。
APK组件包括activities活动组件和services服务组件。在安卓的应用程序中,Activity是Android程序与用户交互的窗口,通常是一个单独的屏幕,屏幕上面可以显示一些控件,也可以监听并处理用户的事件做出响应,主要为保持各界面的状态做持久化的事务,妥善管理生命周期以及一些跳转逻辑。而Service在后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务。Service是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
APK的编译过程包括:1、通过Java编译器将Java源代码编译成Class类文件,Class类文件是Java编译后的目标文件,只是编译过程中的中间目标文件,需要编译成Dex(安卓系统中可执行的文件类型)文件后才能运行。将Class文件处理为Dex文件。2、使用AAPT工具(Android Asset Packaging Tool,安卓打包工具)将Dex字节码放到APK的根目录。使用AAPT工具将Android Mainfest.xml文件进行处理,并且放到APK的根目录。3、使用AAPT工具将资源文件进行处理,并且放到APK的根目录。4、最后将以上文件打包得到一个完整的APK。当一个APK中的组件或资源文件需要升级时,需要重新经历上述打包过程,生成新的APK后,升级后的APK才能被安装使用。
图1示出根据本公开一实施例的应用程序升级方法的流程图,如图1所示,所述应用程序升级方法包括如下步骤:
步骤S10,在启动应用程序后的用户进程中,判断是否有所述应用程序的升级文件。
在一种可能的实现方式中,图7示出根据本公开一实施例的组件启动流程图。如图7所示,组件启动后,先进APP进程(用户进程),然后转移至system-service进程(系统进程),完成系统验证后,再返回用户进程启动。本实施例在启动应用程序后,在启动组件的控制权转移到系统进程之前,首先判断是否有升级文件。可以在应用程序中设置升级标识、或设置升级文件目录,应用程序启动后,通过升级标识或升级文件目录判断是否有升级文件。如果没有升级文件,则正常启动。
步骤S20,在确定有升级文件的情况下,利用代理组件替换所述升级文件对应的目标组件,所述代理组件为已经通过系统验证的组件。
在一种可能的实现方式中,安卓系统应用程序中的组件,在应用程序的全局配置文件(Android Mainfest.xml文件)中进行注册,在应用程序启动后由用户进程进入系统进程,组件通过系统进程的验证后正常启动。
当判断有升级文件时,且所述升级文件需要升级应用程序中的组件时,在启动组件的控制权转移到系统进程之前,利用代理组件替换升级文件对应的目标组件。代理组件可在应用程序的开发阶段,就打包在APK中。通过应用程序的Dex Class Loader类加载器,完成代理组件的加载。
代理组件是已经通过了系统进程验证的组件。代理组件中的内容可以为空。
在一种可能的实现方式中,所述代理组件注册在全局配置文件中。
步骤S30,在系统进程中,利用所述代理组件进行系统验证。
在一种可能的实现方式中,安卓系统的系统进程管理(Android ActivityManagerService,AMS)的一个重要的职责就是进行应用程序进程的管理。系统进程负责对组件进行生命周期以及堆栈管理、权限校验和真实性校验。代理组件可在APK的打包过程中就注册在Android Mainfest.xml文件中,由此,代理组件可以代替需要升级的目标组件完成系统进程的验证。
步骤S40,返回用户进程,利用所述目标组件替换所述代理组件。
在一种可能的实现方式中,Android instrumentation是Android系统里面的一套控制方法或者“钩子”。这些钩子可以在正常的生命周期(正常是由操作系统控制的)之外控制Android控件的运行,同时可以控制Android如何加载应用程序。Instrumentation还负责管理应用程序中组件的生命周期。组件的生命周期包括组件的启动、运行、暂停、停止、删除、重新启动等。代理组件在返回用户进程后,在Instrumentation中New Activity(重新启动)方法中,利用目标组件再替换所述代理组件。此时,目标组件已经通过了系统进程验证,目标组件已经有了系统的生命周期的回调。
步骤S50,根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,虽然目标组件有了系统的生命周期的回调,但目标组件中的内容还都是代理组件的。因此,需要根据升级文件更新目标组件,将升级文件中的相关内容注入目标组件中。完成目标组件的更新后,得到升级后的应用程序。
在一种可能的实现方式中,根据所述升级文件更新所述目标组件,包括:根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。例如利用hook的方式,将升级文件中的主题theme、资源resource和上下文context注入目标组件中,完成应用程序的升级。
在本实施例中,通过应用程序中已经通过系统进程验证的代理组件,代替需要进行升级的目标组件,完成系统进程的验证过程。在返回用户进程后,再将代理组件替换为目标组件,并根据升级文件完成目标组件的升级。可以使需要升级的目标组件绕过系统进程的验证过程,不用重新进行应用程序的APK打包过程,真正实现应用程序无侵入的免安装升级,提高了安卓应用程序的系统资源使用率,以及提高了应用程序的转化率。可以在不嵌入应用程序打包过程的前提下,实现动态升级,不但能实现传统类级别的升级,也可以实现带资源的APK级别的升级。本公开可以实现应用程序根据多套升级方案,按需挑选进行升级,还可以做到SDK的按需后台加载或延迟懒加载,优化启动速度。
图2示出根据本公开一实施例的应用程序升级方法的流程图,如图2所示,步骤S10中判断是否有升级文件,包括:
步骤S11,通过检索升级文件目录判断是否有升级文件。
在一种可能的实现方式中,在应用程序的APK中,设置升级文件目录,当有升级文件时,将升级文件放置于升级文件目录中。当没有升级文件时,升级文件目录为空。在应用程序启动后的用户进程中,可在启动组件之前,首先检索升级文件目录,发现其中有升级文件时,判断为有升级文件。
或者,步骤S10中判断是否有升级文件,包括:步骤S12,通过升级标识信息判断是否有升级文件。
在一种可能的实现方式中,在APK中,设置一个升级标识信息用来标识是否有升级文件,例如利用简单的二进制代码,0代表无升级文件,1代表有升级文件。启动组件之前,检查升级标识信息,判断是否有升级文件。
在本实施例中,在应用程序中设置升级文件目录或升级标识信息,用于在启动应用程序后的用户进程中,判断是否有升级文件。升级文件判断的实现方式简单、可靠。
图3示出根据本公开一实施例的应用程序升级方法的流程图,如图3所示,所述应用程序升级方法还包括:
步骤60,将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件。
上述实施例中的步骤S50,包括:根据所述统一资源文件,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,Android应用程序会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在APK打包期间整合到APP中的,运行时由AssetManager资源管理框架和Resources资源两个类来实现资源的查找。图5示出根据本公开一实施例的安卓系统资源查找的流程图。如图5所示,应用程序组件(Application Component)调用资源,可以通过AssetManager和Resources进行查找。其中,Resources类可以根据资源的标识Resources ID来查找资源,而AssetManager类根据文件名来查找资源。Resources类是先根据ID来找到资源文件名称FileName,然后再将该文件名称交给AssetManager类来打开对应的文件的。这个资源查找过程对于APP开发过程是完全透明的。
应用程序打包过程中将资源ID与resource的对应关系编译在resources.arsc文件中,在R文件中进行声明。R文件中默认有多个静态内部类,每个静态内部类分别对应一种资源,且每个静态内部类中的静态常量分别定义为一条资源标识符。AssetManger根据resources.arsc中的映射来找到相应的资源,并且AssetManger支持从多个索引表中顺序查找,例如apk引用到的系统资源与自有资源就存在于两个不同的索引表中,如果两个索引表中的ID一致就实现了资源的查找替换,这就是资源加载的基本原理Overlay Package叠加包机制。图6示出根据本公开一实施例的安卓系统中资源管理框架根据顺序查找资源的流程图。如图6所示,Asset Manger根据顺序查找从APK3中的resources.arsc检索ID对应的资源。
为使得升级文件中的资源同时适用于所有的应用程序,而不是随着应用程序的打包过程随时变换,需要提前编译出升级文件的resources.arsc文件,做到升级文件的ID统一。而资源ID顺序编号、升级文件的ID与各应用程序的资源ID会出现冲突。因此,本实施例将所有的资源以固定标识顺序进行统一标识,得到统一资源文件。本实施通过修改AAPT打包工具,打包后的资源编码也使用统一的资源编码。
将系统中的资源以固定标识顺序进行统一标识,包括按照文字、字母、数字等各种组合形式进行顺序编号。例如按照ABCDEabcde,其中ABCDE可以为产品信息、公司信息等,后面的abcde为数字的顺序编号。例如公司YK提供的资源,可以固定标识顺序标识为YK000001、YK000002、YK000003、YK000004、YK000005,后续进行数字部分的顺序编号即可。
当使用固定标识顺序对系统中的资源进行统一标识,得到统一资源文件后,在应用程序的生成过程中,以及升级文件的制作过程中,都可以方便的直接使用统一的资源标识,从而更加高效的完成应用程序的升级。
根据统一资源文件以及根据所述升级文件更新所述目标组件,得到升级后的应用程序,可以动态的任意加载各种资源。还可以根据不同的用户实现不同的资源加载,例如,应用程序为不同的用户调用不同的皮肤资源、不同的字体资源以及不同的图像资源,从而实现应用程序的动态免安装换肤,同一个应用程序千人千面的效果。
图4示出根据本公开一实施例的应用程序升级方法的流程图,如图4所示,所述应用程序升级方法还包括:
步骤S70,获取升级代码的地址信息。
在一种可能的实现方式中,升级文件中可能包括升级代码,升级代码是APK中需要进行升级的源代码。通常将升级代码存放一个文件中,当应用程序中的源代码需要升级时,升级文件根据升级代码的地址信息,即存放升级代码的文件地址,即可获取到升级代码,完成旧的代码的替换。可以理解的是,上述实施例中的步骤S50,包括:根据升级代码的地址信息,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
应用示例:
以下结合示例性的应用场景给出应用示例,该应用示例仅为了便于理解,而非限制本公开实施例。
图8示出传统的应用程序升级流程图,如图8所示,在传统的应用程序的升级流程中,应用程序的APK开发完成后,进行APK的安装和运行过程,当需要进行APK升级时,需要返回APK开发阶段,重新打包后重新安装并运行。
图9示出根据本公开一实施例的应用程序升级流程图,如图9所示,图中的needle框架是应用了本公开提供的升级方法。在needle框架下开发完成的APK,在安装运行后,需要进行应用程序的升级时,只需要在needle框架下完成APK的升级后,直接运行就可以完成应用程序的升级。
以Activity组件的升级为例。本实施例利用Activity组件的插件化来完成应用程序的升级。为做到无侵入的实现Activity的动态加载,本实施在用户进程中进行改进,主要包括加载和启动两个大的步骤。
一、加载。Activity从加载的角度讲与普通的类是一样的,将activity所在的插件apk注入到应用程序(以下简称宿主)的DexClassLoader中,借助DexClassLoader完成插件类的加载。
二、启动。Android有一个限制,所有的组件必须AndroidManifest.xml中显示声明,为了实现插件的动态化,必须绕过这个限制。通过显式声明的代理组件StubActivity,注册在宿主的AndroidManifest.xml里面,让代理组件Activity进入AMS进程接受检验;最后在返回用户进程时换成目标组件,目标组件是真正需要启动的Activity,于是成功地欺骗了AMS进程。具体的实现步骤包括:
(1)替身绕过AMS校验,在启动Activity的控制权转移到AMS进程之前,临时把目标组件TargetActivity替换成代理StubActivity。
通过这个替换过程,AMS进程system_server端收到Binder驱动的消息,开始执行ActivityManagerService里面真正的startActivity方法;这时候AMS看到的intent参数里面的组件已经是StubActivity了,因此可以成功绕过检查。
(2)替身恢复为真身,上面activity启动简图中的第三步,回到用户进程,在Instrumentation中的NewActivity方法中恢复真身。
通过以上两步,目标组件Activity得已启动,并且有了系统的生命周期回调。但目标组件的theme、resource、context等都还是代理组件的,所以第三部通过hook的方式注入。
至此实现了无侵入启动插件中的Activity组件,其它组件,例如services组件也可以用上述的方式实现。
图10示出根据本公开一实施例的应用程序升级装置的框图。如图10所示,该装置包括:
升级文件判断模块61,用于在启动应用程序后的用户进程中,判断是否有所述应用程序的升级文件;
第一替换模块62,用于在确定有升级文件的情况下,利用代理组件替换所述升级文件对应的目标组件,所述代理组件为已经通过系统验证的组件;
验证模块63,用于在系统进程中,利用所述代理组件进行系统验证;
第二替换模块64,用于返回用户进程,利用所述目标组件替换所述代理组件;
更新模块65,用于根据所述升级文件更新所述目标组件,得到升级后的应用程序。
图11示出根据本公开一实施例的应用程序升级装置的框图,如图11所示,
在一种可能的实现方式中,所述升级文件判断模块61,包括:
第一判断子模块611,用于通过检索升级文件目录判断是否有升级文件,或
第二判断子模块612,用于通过升级标识信息判断是否有升级文件。
在一种可能的实现方式中,所述代理组件注册在全局配置文件中。
在一种可能的实现方式中,所述更新模块65,包括:
注入子模块651,用于根据所述升级文件,向所述目标组件注入升级后的主题、资源和上下文。
在一种可能的实现方式中,该装置还包括:
资源统一标识模块66,用于将系统中的资源以固定标识顺序进行统一标识,得到统一资源文件;
所述更新模块65,包括:
第一更新子模块652,用于根据所述统一资源文件,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
在一种可能的实现方式中,该装置还包括:
升级代码地址信息获取模块67,用于获取升级代码的地址信息;
所述更新模块65,包括:
第二更新子模块653,用于根据升级代码的地址信息,以及根据所述升级文件更新所述目标组件,得到升级后的应用程序。
图12是根据一示例性实施例示出的一种用于应用程序升级装置800的框图。例如,装置800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图12,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在装置800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当装置800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到装置800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器804,上述计算机程序指令可由装置800的处理器820执行以完成上述方法。
本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。