一种缩短安卓操作系统启动时间的设置方法
【专利摘要】本发明公开了一种缩短安卓操作系统启动时间的设置方法,属于操作系统快速启动【技术领域】。本发明包括启动安卓设备,执行引导程序,由引导程序装载Linux内核;再执行安卓用户空间资源加载、本地服务开启和用户分区扫描后,执行Zygote进程,在加载完安卓虚拟机所需的类与资源后,中断该进程并为其设置还原点文件,以及创建还原点文件检查进程,设置该进程在引导程序装载Linux内核后启动,用于判断是否存在所述还原点文件,若存在,则根据还原点文件对初始化安卓虚拟机进程进行还原;若不存在,则执行初始化安卓虚拟机进程。本发明用于安卓设备,能在保证用户体验的前提下显著缩短系统启动时间。
【专利说明】一种缩短安卓操作系统启动时间的设置方法
【技术领域】
[0001]本发明涉及操作系统快速启动技术,特别是一种基于安卓操作系统的快速启动方法。
【背景技术】
[0002]安卓是一种基于Linux的自由及开源的操作系统,安卓操作系统已广泛应用于移动设备、智能家电等领域,如智能手机、平板电脑、机顶盒、智能电视等。随着安卓操作系统在这些领域的大量使用,系统启动速度慢成为许多用户抱怨的缺点。相比手机这类平时较少断电冷启动的设备,平板电脑、智能电视等在实际使用中断电冷启动的频率相对较高,开机速度是影响用户体验的一个重要因素。
[0003]安卓操作系统启动过程如图1所示,按照先后顺序分别为:引导程序、Linux内核、本地服务、安卓虚拟机、安卓服务、应用程序的启动。安卓操作系统从设备通电到进入安卓用户界面,一般需要35秒左右的时间,而用户空间启动就占用了多于28秒的时间:从Zygote进程(该进程用于设备开机过程中初始化安卓虚拟机)被创建到SystemServer进程(该进程用于管理安卓系统服务)被创建用时18秒左右;从SystemServer进程被创建到最终进入用户界面,用时10秒左右。Zygote进程通过预加载近2800多个类以及图标、图像、字符串等资源来完成安卓虚拟机的初始化,这会消耗大量时间。SystemServer进程的耗时在于启动安卓服务并扫描安装包。
[0004]当前缩短安卓启动时间的方案主要是基于ARM Hibernat1n(休眠/唤醒技术)的方法:将内存中的所有数据以及CPU、设备的运行状态的数据全部保存到该方案所申请的内存空间中,生成快速启动的内存映像并将内存映像以特定格式保存到外存(非易失的存储设备),以后设备每次启动时由引导程序从外存读取特定格式的内存映像到内存并且恢复CPU、设备的运行状态信息。该方法直接从备份的映像文件读取信息并恢复系统的运行状态,跳过了每次启动时对最新的系统分区和用户分区的扫描阶段,因此用户每次安装新应用程序后必须重新做一次系统的休眠/唤醒以生成内存映像,否则设备重启后新安装的应用程序就会消失,而这一过程需要花费较长的时间,该缺点严重影响了用户体验。
【发明内容】
[0005]本发明目的是针对安卓操作系统启动较缓慢的问题以及现有相关技术方案的不足,提出了一种在用户空间缩短安卓操作系统启动时间的设置方法。
[0006]为了实现上述目的,本发明的技术方案是:改进现有的初始化安卓虚拟机进程(Zygote进程)的启动过程,其具体实现包括下列步骤:
[0007]步骤1:启动安卓设备,执行引导程序,由引导程序装载Linux内核;再执行安卓用户空间资源加载、本地服务开启和用户分区扫描;
[0008]步骤2:执行初始化安卓虚拟机进程,在加载完安卓虚拟机所需的类与资源后,中断初始化安卓虚拟机进程;
[0009]步骤3:为Zygote进程创建还原点:设置还原点文件的文件目录(可任意设置存放文件目录),并在该文件目录下创建还原点文件,所述还原点文件包括当前进程链接信息、进程ID、CPU状态信息、进程的内存执行环境信息;
[0010]创建还原点文件检查进程,设置所述还原点文件检查进程在引导程序装载Linux内核后启动,用于判断是否存在所述还原点文件(即用户在启动安卓设备时起作用),若存在,则根据还原点文件对Zygote进程进行还原(即Zygote进程在还原点处开始运行从而跳过了类与资源的预加载阶段,完成快速启动过程);若不存在,则基于现有的方式执行Zygote 进程。
[0011]本发明对现有的Zygote进程创建了还原点,每次系统启动时只需要找到相应的还原点文件进行还原即可,避免了系统每次启动时进行重复的预加载类与资源操作,这一优化可以节约14秒左右的系统启动时间。同时,由于本发明不会跳过每次启动时对最新的系统分区和用户分区的扫描阶段,用户无需靠重新生成内存映像去保证设备重启后新安装应用的存在,弥补了现有方案的不足,提高了用户体验。
[0012]进一步的,本发明的步骤3还包括,在创建还原点文件后,继续执行初始化安卓虚拟机进程,并判断系统是否能进行安卓用户界面,若否,则执行步骤2,该处理用于检测备份Zygote进程还原点文件成功是否备份成功。
[0013]为了进一步缩短系统启动时间,本发明还包括延迟加载包、延迟启动初始服务设置:
[0014]即将系统分区的安装包和服务分为延迟安装包、延迟服务和启动安装包、启动服务(具体可根据用户需求调查挑选出用户不常用或系统启动后不会被用户立即使用的安装包和服务作为延迟安装包、延迟服务),将延迟安装包和服务从系统分区移动到用户分区;在安卓操作系统启动完成后,再启动延迟安装包和服务。
[0015]该延迟设置可以在上述步骤1、2或3任意一个步骤处理中进行或者在完成上述步骤1、2、3之后。在上述设置中,对非必要的安装包及服务进行延迟加载的操作,这一方法可以节约5秒左右的启动时间。
[0016]综上所述,由于采用了上述技术方案,本发明的有益效果是:本发明对Zygote进程创建了还原点,每次启动时只需要找到相应的还原点文件进行还原即可,避免了系统每次启动时进行重复的预加载类与资源操作,这一优化可以节约14秒左右的启动时间。其次,本发明对非必要的安装包及服务进行延迟加载的操作,这一方法可以节约5秒左右的启动时间。最后,由于本发明不会跳过每次启动时对最新的系统分区和用户分区的扫描阶段,用户无需靠重新生成内存映像去保证设备重启后新安装应用的存在,弥补了现有方案的不足,提高了用户体验。
【专利附图】
【附图说明】
[0017]本发明将通过例子并参照附图的方式说明,其中:
[0018]图1是安卓操作系统正常启动时的系统架构图。
[0019]图2是本发明实施例1的设置流程图。
【具体实施方式】
[0020]为使本发明的目的、技术方案和优点更加清楚,下面结合实施方式,对本发明作进一步地详细描述。
[0021]实施例1
[0022]参见图2,为了实现缩短安卓操作系统启动时间,本发明包括下列设置:
[0023]步骤101:启动安卓设备,执行引导程序,由引导程序装载Linux内核;再执行安卓用户空间资源加载、本地服务开启和用户分区扫描,即基于现有的安卓操作系统完成系统的初始化。
[0024]步骤102:由Zygote进程加载完安卓虚拟机所需的类与资源后,中断Zygote进程(由系统的库libprocr.so提供的procr_freeze_process函数(该函数具有预处理检查功能)停掉中断时钟并堵塞相关信号以冻结Zygote进程)
[0025]步骤103:
[0026](I)由库libprocr.so提供的函数完成对Zygote进程的还原点创建,即当调用库libprocr.so提供的相关函数后进程就会为Zygote进程创建还原点:
[0027]本步骤中,基于获取的当前安卓操作系统文件的文件结构,为还原点文件写入可被库libprocr.so识别的头部信息(即为还原点文件设置可被库libprocr.so识别的标示符)。
[0028]在Zygote进程的preload O函数后加入procr_request_check O库函数,该函数向内核发送信号使得Zygote进程陷入内核为自己创建还原点文件(本实施例中还原点文件命名为Zygote, procr);首先指定还原点文件的文件目录,本实施例中,设置为/data/,然后将当前Zygote进程链接信息、Zygote进程ID、CPU状态信息、Zygote进程的内存执行环境信息、signal信息(表头文件,用于设置某一信号的对应动作)保存到所创建的还原点文件中;
[0029](2)创建还原点文件检查进程(本实施例命名为procr进程),并设置procr进程在引导程序装载Linux内核后启动,用于判断/data/下是否存在上述设置的还原点文件,若存在,则根据还原点文件对Zygote进程进行还原;否则基于现有的方式执行Zygote进程。
[0030]本实施例中,procr进程的设置具体为:
[0031]编写文件procr.sh:首先检查/data/下是否存在进程还原点文件。如果存在,还原Zygote进程;否则,创建procr进程,并由procr进程创建Zygote进程,基于现有的方式执行Zygote进程。
[0032]将procr.sh文件放到/system/bin目录下并修改其权限为可执行,修改init.rc脚本(该脚本记录着初始化进程执行的功能)使得系统在创建Zygote进程前先创建procr进程。
[0033]本实施例中个,在根据还原点文件对Zygote进程进行还原处理时,由procr进程的 proc_restart 程序(/system/bin/proc_restart-f/data/Zygote.procr// 恢复进程状态)根据还原点文件内容恢复Zygote进程ID、CPU状态信息、Zygote进程的内存执行环境信息。将proc_restart放到/system/bin目录下修改成可执行权限,并将还原文件Zygote,procr保存在/data目录下,为只读权限。Zygote进程恢复可运行状态后,在还原点处继续运行从而跳过耗时的类与资源的预加载阶段,实现了系统的快速启动。
[0034]步骤104:Zygote进程完成还原点创建,如果Zygote进程继续运行最后成功进入安卓用户界面说明备份Zygote进程还原点文件成功,否则进入步骤102重新备份;
[0035]本步骤中,Zygote进程完成还原点创建后退回到procr进程,先把停掉的中断时钟打开再把堵塞的信号恢复过来,再继续运行后续进程(以进入安卓用户界面)以测试是否备份Zygote进程成功。
[0036]经上述设置后的安卓设备,用户在启动安卓是设备后,首先执行引导程序,由引导程序装载Linux内核,在执行安卓用户空间资源加载、本地服务开启和用户分区扫描后,则执行procr进程;进程procr会首先检查/data/下是否存在还原点文件,若否,则由procr进程重新创建Zygote进程进入现有的启动模式;若是,则进入本发明的快速启动模式(根据还原文件将Zygote进程进行运行状态还原后执行后续进程后进入安卓用户界面),即在还原点处继续运行从而跳过耗时的类与资源的预加载阶段,实现了系统的快速启动。
[0037]实施例2
[0038]在实施例1的设置方式上增设了关于延迟安装包、延迟服务的设置,具体为:
[0039]在步骤101中,根据用户需求调查挑选出用户不常用或系统启动后不会被用户立即使用的安装包和服务,定义为延迟安装包、延迟服务,其余的定义为启动安装包、启动服务;
[0040]然后将延迟安装包、延迟服务从系统分区移到用户分区,从而实现对非必要服务的暂时堵塞init.rc脚本(该脚本记录着初始化进程执行的功能);
[0041]本步骤中,我们以堵塞服务A为例给出具体的实施方式。首先,在init.rc脚本中添加代码:
[0042]On property:r0.user, start = I
[0043]Start A
[0044]在init.rc脚本文件中,记录着某个属性改变后要采取的动作,动作的执行条件以“on property:〈key〉=〈value〉”形式给出。当某个执行条件相关的键值被设定后,与该条件相关的触发器就会被触发。如上所示,当r0.user, start属性值被设置为I时,A服务就会被启动。
[0045]最后,在安卓操作系统启动完成后启动延迟安装包和服务,本实施例中,采用由定制的安卓应用(本实施例中命名为Delayinit.apk),选择用户inactivity状态启动被堵塞的服务并且安装用户分区的包。本步骤中,将定制的安卓应用一一Delayinit.apk加入系统。系统启动完成后,安卓Applicat1n Framework会向Delayinit.apk发送一个Intent消息,命名为B00TC0MPLETED Intent。以上述服务A为例,Delayinit.apk收到关于服务A的intent消息后会选择用户inactivity状态设置r0.user, start属性为I并唤醒init进程开启服务A。当用户处于inactivity状态时,Delayinit.apk也会调用“PM”工具去扫描安装用户分区的安装包。所述“PM”工具由安卓操作系统提供,它会隐式的调用PackageManager系统服务完成特定分区(本实施例为用户分区)中安装包和服务的扫描和安装工作。
[0046]本发明的恢复Zygote进程到特定的执行状态与现有的基于ARM Hibernat1n的休眠/唤醒技术的不同之处在于=Zygote进程恢复到还原点处开始运行仅仅跳过了类与资源的预加载阶段并不影响系统应用的更新,因此需要恢复的信息量少,恢复迅速。而现有的基于ARM Hibernat1n的休眠/唤醒技术会跳过安卓用户空间启动甚至Linux内核启动,虽然节约了被跳过部分的启动时间,但是需要恢复的信息量大,恢复耗时,并且每次从备份的映像文件恢复导致不能更新系统应用。
[0047]采用实施例1所述的方法,通过BootChart工具采集正常启动和快速启动的进程启动时间信息。正常启动时,从Zygote进程创建到加载完类与资源用时18秒左右;快速启动时,完成这一过程仅用时4秒左右。
[0048]采用实施例2所述的方法,通过BootChart工具采集正常启动和快速启动的进程启动时间信息。未采用延迟技术时,从SystemServer进程被创建到最终进入用户界面,用时10秒左右;采用延迟技术后,完成这一过程仅用时5秒左右。
[0049]本发明并不局限于前述的【具体实施方式】。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。
【权利要求】
1.一种缩短安卓操作系统启动时间的设置方法,其特征在于,包括下列步骤: 步骤1:启动安卓设备,执行引导程序,由引导程序装载Linux内核;再执行安卓用户空间资源加载、本地服务开启和用户分区扫描; 步骤2:执行初始化安卓虚拟机进程,在加载完安卓虚拟机所需的类与资源后,中断初始化安卓虚拟机进程; 步骤3:设置还原点文件的文件目录,并在所述文件目录下创建还原点文件,所述还原点文件包括当前进程链接信息、进程ID、CPU状态信息、进程的内存执行环境信息; 创建还原点文件检查进程,设置所述还原点文件检查进程在引导程序装载Linux内核后启动,用于判断是否存在所述还原点文件,若存在,则根据还原点文件对初始化安卓虚拟机进程进行还原;若不存在,则执行初始化安卓虚拟机进程。
2.如权利要求1所述的方法,其特征在于,所述步骤3还包括,在创建还原点文件后,继续执行初始化安卓虚拟机进程,并判断系统是否能进行安卓用户界面,若否,则执行步骤2。
3.如权利要求1或2所述的方法,其特征在于,还包括将系统分区的安装包和服务分为延迟安装包、延迟服务和启动安装包、启动服务,将延迟安装包和服务从系统分区移动到用户分区;在安卓操作系统启动完成后,再启动延迟安装包和服务。
【文档编号】G06F9/445GK104503788SQ201410784129
【公开日】2015年4月8日 申请日期:2014年12月16日 优先权日:2014年12月16日
【发明者】杨霞, 桑楠, 孙海泳, 石鹏, 雷林, 孙超群, 刘志伟, 武琼, 刘维飞, 袁艺, 杨姗, 沈游人, 李昊星, 唐伟文 申请人:电子科技大学