本发明涉及计算机操作系统技术领域,尤其涉及一种基于Android系统实现快速开机的方法。
背景技术:
Android系统为当前最流行的消费电子软件系统,虽然用户群广,但大家都拿其运行体验与IOS系统比较。Android系统为了运行时的体验效果,设计了预加载模式,这就牺牲了开机速度这一体验。
所谓预加载是指Zygote在开机的时候加载了一个大而全的应用运行环境。Zygote是整个Android系统中所有应用的母本,所以其对整个系统来说是非常重要的;所以需要在对系统中所有应用都不影响的前提下,去优化其对开机时间的影响。在Android系统中,所有的应用进程以及系统服务进程SystemServer都是由Zygote进程创建出来的,Zygote创建其他进程的时候都会复制本身的环境的给每一个新的进程。这样虽然每一个应用的环境不用自己加载,但Zygote需要加载资源就非常多。需要加载的资源数量庞大加上Zygote同步加载资源的方式,这就导致了目前虽然硬件性能在不断提升但开机时间不见减少的问题。为此本发明设计了一套缩短Zygote加载资源对开机时间影响的方法。
技术实现要素:
针对现有技术存在的不足之处,本发明的目的在于提供一种基于Android系统实现快速开机的方法,缩短了Android系统开机时的预加载资源时间,提升了整个Android系统的开机速度,使用户能更快使用到Android智能设备,提升产品体验操作,增强产品的竞争力。
本发明的目的通过下述技术方案实现:
一种基于Android系统实现快速开机的方法,对Android系统中Zygote加载的所有资源按照是否为SystemServer初始化所需划分为ResA和ResB两部分,其中ResA为SystemServer初始化过程中所需要的所有资源,ResB为SystemServer初始化过程中不需要的所有资源,ResB包括所有APP应用所对应的资源;
其开机方法步骤如下:
A、Android系统开机启动,Zygote首先加载ResA资源,确保ResA的所有资源加载完毕后,马上启动SystemServer;
B、启动SystemServer后,Zygote开始加载ResB的部分资源,并提供同步等待ResB加载完成的接口,可供SystemServer启动APP应用前调用;
C、SystemServer启动APP应用后,完成与该APP应用相对应的剩余所有ResB资源加载。
为了更好地实现本发明,一种基于Android系统实现快速开机的方法,对Android系统中Zygote加载的所有资源按照是否为SystemServer初始化所需划分为ResA和ResB两部分,其中ResA为SystemServer初始化过程中所需要的所有资源,ResB为SystemServer初始化过程中不需要的所有资源,ResB包括所有APP应用所对应的资源;将ResA的资源划分为ResA1、ResA2、ResA3…ResAn共计n个组资源,每组资源的加载耗时相当或相同;
其开机方法步骤如下:
A、Android系统开机启动,Zygote首先加载ResA资源,Zygote分别异步加载ResA1、ResA2、ResA3…ResAn共计n组资源,确保ResA的所有资源加载完毕后,马上启动SystemServer;
B、启动SystemServer后,Zygote开始加载ResB的部分资源,并提供同步等待ResB加载完成的接口,可供SystemServer启动APP应用前调用;
C、SystemServer启动APP应用后,完成与该APP应用相对应的剩余所有ResB资源加载。
Android系统的开机过程为:Linux启动Zygote,Zygote完成启动后在由Zygote启动SystemServer,SystemServer完成启动后SystemServer就会启动应用程序,这时这个系统完成开机。整个过程中Zygote和SystemServer是串行启动,并且各自内部初始化也串行加载的。整个流程可见图1。由于加载模式和启动方式的限制,导致虽然硬件性能在不断提升但开机时间不见缩短的问题。目前很多终端性能都很强大,很多都是双核或者是四核CPU,使用bootchart可以清楚看到Zygote和SystemServer启动过程中CPU负载并不高。所以对于高性能的终端通过调整加载资源的方式完全可以实现缩短Android系统开机时间的目的。
Zygote所预加载的资源是整个系统所需要的,虽然SystemServer启动所需资源是依赖于Zygote,但SystemServer初始化所需的资源是小于Zygote所全部加载的资源。所以本发明设计了一种分段加载与多线程异步加载相结合的方案。
分段是指:将Zygote需要加载的所有资源分为两部分,SystemServer初始化时需要的资源(以下简称ResA)和其他剩余资源(以下简称ResB),Zygote先加载ResA,然后马上启动SystemServer,最后再加载ResB。异步是指:Zygote在加载ResA时,为了充分利用硬件的性能,采用多线程异步加载的方式,将ResA分为多组,一个线程加载一组。ResA分多少组是根据具体终端的性能来确定,终端能最快异步加载多少组资源,就将ResA分为多少组;而每一组中具体资源是根据每个资源加载耗时来确定,确保每一组加载耗时差在可以接受的范围。
Zygote先以最快速度加载第一段资源,然后启动SyetemServer,再加载剩下的一段资源,这样将整个资源分为两段加载,并在加载第一段的时候采用异步多线的方式。由于使用了异步加载机制,但SyetemServer和APP又都依赖于Zygote所加载的资源;所以需要在SystemServer启动时增加ResA加载完成的同步检查、需要在APP启动时增加ResB加载完成的同步检查。对于ResA的检查,需要Zygote的主线程在同步等待每一个加载ResA的线程完成后再启动SystemServer;而对于ResB的检查,需要Zygote提供同步等待ResB加载完成的接口,可供SystemServer启动APP前调用。
整个优化后的流程可见附图二。
本发明较现有技术相比,具有以下优点及有益效果:
本发明缩短了Android系统开机时的预加载资源时间,提升了整个Android系统的开机速度,使用户能更快使用到Android智能设备,提升产品体验操作,增强产品的竞争力。
附图说明
图1为传统Android系统开机流程示意图;
图2为本发明基于Android系统实现快速开机的流程示意图。
具体实施方式
下面结合实施例对本发明作进一步地详细说明:
实施例一
如图2所示,一种基于Android系统实现快速开机的方法,对Android系统中Zygote加载的所有资源按照是否为SystemServer初始化所需划分为ResA和ResB两部分,其中ResA为SystemServer初始化过程中所需要的所有资源,ResB为SystemServer初始化过程中不需要的所有资源,ResB包括所有APP应用所对应的资源;
其开机方法步骤如下:
A、Android系统开机启动,Zygote首先加载ResA资源,确保ResA的所有资源加载完毕后,马上启动SystemServer;
B、启动SystemServer后,Zygote开始加载ResB的部分资源,并提供同步等待ResB加载完成的接口,可供SystemServer启动APP应用前调用;
C、SystemServer启动APP应用后,完成与该APP应用相对应的剩余所有ResB资源加载。
实施例二
如图2所示,一种基于Android系统实现快速开机的方法,对Android系统中Zygote加载的所有资源按照是否为SystemServer初始化所需划分为ResA和ResB两部分,其中ResA为SystemServer初始化过程中所需要的所有资源,ResB为SystemServer初始化过程中不需要的所有资源,ResB包括所有APP应用所对应的资源;将ResA的资源划分为ResA1、ResA2、ResA3…ResAn共计n个组资源,每组资源的加载耗时相当或相同;
其开机方法步骤如下:
A、Android系统开机启动,Zygote首先加载ResA资源,Zygote分别异步加载ResA1、ResA2、ResA3…ResAn共计n组资源,确保ResA的所有资源加载完毕后,马上启动SystemServer;
B、启动SystemServer后,Zygote开始加载ResB的部分资源,并提供同步等待ResB加载完成的接口,可供SystemServer启动APP应用前调用;
C、SystemServer启动APP应用后,完成与该APP应用相对应的剩余所有ResB资源加载。
实施例三
如图2所示,一种基于Android系统实现快速开机的方法,对Android系统中Zygote加载的所有资源按照是否为SystemServer初始化所需划分为ResA和ResB两部分,其中ResA为SystemServer初始化过程中所需要的所有资源,ResB为SystemServer初始化过程中不需要的所有资源,ResB包括所有APP应用所对应的资源;将ResA的资源划分为ResA1、ResA2、ResA3…ResAn共计n个组资源,每组资源的加载耗时相当或相同;
其开机方法步骤如下:
1、Zygote在加载ResA时,根据ResA的分组建立对应的线程异步加载每一组资源;并在主线程中增加每一个线程加载完成状态同步机制。在确保所有异步加载ResA的线程完成后及ResA完成加载后,马上启动SystemServer。
2、启动SystemServer后,Zygote开始加载ResB。并提供同步等待ResB加载完成的接口,可供SystemServer启动APP前调用。
3、SystemServer在完成启动后,在启动APP前,增加同步等待查询Zygote中ResB加载情况的步骤。确保APP启动时Zygote已经完成所有资源的加载
4、SystemServer启动APP后,开始加载ResB。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。