基于Android的应用程序冷启动优化方法及系统与流程

文档序号:12271004阅读:314来源:国知局
基于Android的应用程序冷启动优化方法及系统与流程

本发明涉及Android中应用程序的启动技术,尤其涉及一种基于Android的应用程序冷启动优化方法及系统。



背景技术:

Android中的应用程序启动方式总共有2种,一种是冷启动,一种是热启动。通常应用程序的冷启动的时间会比应用程序的热启动的时间长。启动时间太长会在很大程度上影响用户体验。比如启动时间太长,则启动到出现界面的时间会比较久,这期间内的显示就会是白屏状态。启动时间太久也会导致用户进入应用程序的等待时间会变长,大大降低了用户的体验。



技术实现要素:

本发明的发明目的,在于提供一套加速Android中应用程序冷启动的方法,能够加快应用程序的冷启动速度,从而大大提升用户的使用体验。

本发明为达上述目的,所采用的技术方案是:

提供一种基于Android的应用程序冷启动优化方法,包括以下步骤:

启动应用程序;

开启线程池任务,通过多条子线程并行对应用程序启动过程中的所有数据进行初始化,并将初始化后的数据发送给应用程序的注册界面;

注册界面对接收到的初始化数据进行解析并及时刷新注册界面。

本发明所述的方法中,在开启线程池任务后,通过预定义的默认数据代替未初始化好的数据,以快速显示注册界面。

本发明所述的方法中,所述线程池为定长线程池,在该定长线程池中设置子线程最大并发数,超出的子线程在队列中等待。

本发明所述的方法中,若某一子线程中的数据初始化完成,则将初始化好的数据封装在广播消息里面,然后再发送出去。

本发明所述的方法中,数据的封装过程为:将初始化好的数据通过Android系统中的数据存储工具进行存储,不同数据调用不同的存储函数进行存储。

本发明所述的方法中,数据存储工具为Bundle,数据的封装过程具体为:

如果为int数据,则调用Bundle中的putInt函数将int数据存储到Bundle中;

如果为string数据,则调用Bundle中的putString函数(该函数主要功能是存储字符串数据)将String数据存储到Bundle中。

如果为long数据,则调用Bundle中的putLong函数将long数据存储到Bundle中;

如果为float数据,则调用Bundle中的putFloat函数将float数据存储到Bundle中。

本发明所述的方法中,注册界面通过监听广播接收数据,并对接收的数据进行解析,根据数据类型调用不同的函数获取相应的数据。

本发明所述的方法中,该方法还包括步骤:

当注册界面全部刷新完成后,则关闭线程池,快速释放线程池中的资源。

本发明还提供一种基于Android的应用程序冷启动优化系统,其特征在于,包括:

启动模块,用于启动应用程序;

线程池模块,用于开启线程池任务,通过多条子线程并行对应用程序启动过程中的所有数据进行初始化,并将初始化后的数据发送给应用程序的注册界面;

注册界面模块,用于对接收到的初始化数据进行解析并刷新注册界面。

本发明所述的基于Android的应用程序冷启动优化系统中,所述注册界面模块还用于在线程池任务开启后,通过预定义的默认数据代替未初始化好的数据,以快速显示注册界面。

本发明产生的有益效果是:本发明在Android的任一应用程序的冷启动过程中采取线程池的方式来异步初始化数据,等数据初始化完成以后,再将初始化好的所有数据通过广播消息发给界面,从而刷新界面。本发明能够加快应用程序的冷启动速度,从而提高应用程序响应速度并提升用户使用体验。

进一步地,在注册界面上的数据还没有完全初始化完成时,使用默认数据来进行替代,可优先快速展示注册界面。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明实施例基于Android的应用程序冷启动优化方法的流程图;

图2是本发明另一实施例基于Android的应用程序冷启动优化方法的流程图;

图3是本发明数据封装的流程图;

图4是本发明第三实施例基于Android的应用程序冷启动优化方法的流程图;

图5是本发明实施例基于Android的应用程序冷启动优化系统结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

对相关名词进行解释如下:

冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

本发明的应用程序冷启动与系统的冷启动不同,本发明仅仅针对某一个应用程序的冷启动,而系统的启动则涉及到多个应用程序的启动。此外本发明的应用程序冷启动是开启的多线程来加速应用程序启动,而系统的冷启动是开启多进程并且禁止某些程序启动的方式来达到快速启动的目的。本发明主要是为了提高应用程序的冷启动速度,低冷启动时用户的等待时间,从而提升用户体验。

Android应用程序冷启动过程中最耗时的是对一些启动条件的初始化,这些初始化完成后才会进行界面的展示。为了能够加快应用程序的启动速度,本发明采取了线程池的方式来异步初始化数据。在应用程序显示的过程中通过线程池来开启多个子线程对程序进行初始化操作。

本发明第一实施例中,如图1所示,基于Android的应用程序冷启动优化方法包括以下步骤:

S101、启动应用程序;

S103、开启线程池任务,通过多条子线程并行对应用程序启动过程中的所有数据进行初始化;

S105、将初始化后的数据发送给应用程序的注册界面;

S107、注册界面对接收到的初始化数据进行解析并及时刷新注册界面。

步骤S101中,可通过Android的桌面找到相应应用程序,点击该应用程序图标,则应用程序进行启动。

由于开启了多个子线程来处理所有数据的初始化,并且界面的展示是在主线程,这样界面的展示流程就不用等待所有数据初始化完成后再进行展示,可以优先展示界面。优先展示界面可以让界面更快速的展示出来,此时界面上的部分数据可能这个时候还没有完全初始化完成,这时可以使用默认数据来进行替代。本发明的另一实施例中,如图2所示,基于Android的应用程序冷启动优化方法包括以下步骤:

S101、启动应用程序;

S103、开启线程池任务,通过多条子线程并行对应用程序启动过程中的所有数据进行初始化;

S104、判断是否有子线程的初始化已完成,若是,则转入执行步骤S105;若否,则转入执行步骤S108;

S105、将初始化后的数据发送给应用程序的注册界面;

S107、注册界面对接收到的初始化数据进行解析并及时刷新注册界面。

S108、在开启线程池任务后,通过预定义的默认数据代替未初始化好的数据,以快速显示注册界面。

线程池可以有多种,Android系统中常见的几种模式如下:

1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

2、newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

3、newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。

4、newSingleThreadExecutor:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。

为了提高线程的使用率且不太影响系统开销,本发明的优选实施例中,选择创建定长线程池功能的线程管理器newFixedThreadPool,该定长线程池可控制线程最大并发数,超出的线程在队列中等待。可设置线程最大任务数为3个。这样能够同时最大开启3条线程对所有数据进行初始化操作。若同时有5个初始化任务,则其中3个先执行,其余的在队列中等待。当该3个中任一个先处理完成,则处理第4个,以此类推。通过该定长线程池能够在提升初始效率的同时不会增大对系统造成的额外开销。

上述实施例中,若某一子线程中的数据初始化完成,则将初始化好的数据封装在广播消息里面,然后再发送出去。注册界面会收到相应的广播消息,并从广播消息中将需要的数据进行提取和解析出来,获取到数据后立刻对注册界面进行刷新。只要其中一个子线程初始化完成,就可以及时刷新界面。

进一步地,除了将初始化好的数据封装在广播消息里面发送出去,还可以通过Handler、接口等将初始化好的数据发送出去。

数据的封装过程为:将初始化好的数据通过Android系统中的数据存储工具进行存储,不同数据调用不同的存储函数进行存储。如图3所示,数据的封装过程具体如下:

将初始化好的数据通过Bundle(这个是Android系统中存储数据的工具)来进行存储,不同数据调用不同的方法进行存储。

1.如果是int(整形数据)则调用Bundle中的putInt函数(该函数主要功能是存储整形数据)将int数据存储到Bundle中。

2.如果是string(字符串数据)我们调用Bundle中的putString函数(该函数主要功能是存储字符串数据)将String数据存储到Bundle中。

3.如果是long(长整形数据)则调用Bundle中的putLong函数(该函数主要功能是存储长整形数据)将long数据存储到Bundle中。

4.如果是float(浮点型数据)则调用Bundle中的putFloat函数(该函数主要功能是存浮点型数据)将float数据存储到Bundle中。

可以理解的,初始化好的数据也可以通过Android系统中其他的存储工具来进行存储,如SharedPreferences、sqlite、file等。

本发明实施例中,数据发送过程如下:

首先将数据存储在广播中,存储过程通过调用Intent(发送广播的一个工具)中的putBundle函数(存储Bundle数据)将上述Bundle数据存储在Intent中。存储完成数据后,通过sendBroadcast函数(发送广播功能)将携带有Bundle的数据发送出去。这样接收者就能够接收到该数据了。

优选地,注册界面通过监听广播接收数据,并对接收的数据进行解析,根据数据类型调用不同的函数获取相应的数据。

其中:

a)注册并监听广播数据

广播的监听主要分为2种,监听静态广播和监听动态广播。静态广播:静态广播是无论应用程序是否启动只要有广播过来就可以被接收到。动态广播:只有应用启动之后通过代码动态注册该广播,这个广播接收器只有在应用程序是运行状态的时候才能够接受该广播。本发明优选实施例使用注册静态广播的方式来接收数据。这样无论什么情况下都能够接收到发过来的数据。

b)解析广播数据

广播的解析主要目的是解析广播中所包含的数据信息,广播发送过程中将数据存放在Bundle中,解析过程和数据存储过时是相反的,具体实施如下:

首先通过广播调用getBundle获取到Bundle对象。获取到Bundle对象后就可以对Bundle内的数据进行解析:

如果是int(整形数据)则调用Bundle中的getInt函数(该函数主要功能是获取整形数据)获取Bundle中的int数据。

如果是String(字符串数据)则调用Bundle中的getString函数(该函数主要功能是获取字符串数据)获取Bundle中的String数据。

如果是long(长整形数据)则调用Bundle中的getLong函数(该函数主要功能是获取长整形数据)获取Bundle中的Long数据。

如果是float(浮点型数据)则调用Bundle中的getFloat函数(该函数主要功能是获取浮点数据)获取Bundle中的Float数据。

通过上述的解析就能够将Bundle中的所有数据全部解析出来了。

c)刷新界面

当数据全部解析完成后就可以使用获取到的数据去更新界面程序。这个时候界面上就会展示出来完整的最终加载好数据的效果。

当界面全部刷新完成后,可通过关闭线程池,让线程池中的资源得到快速的释放。这样可以预留出更多的资源给其他程序来进行使用。如图4所示,在上述实施例的基础上可增加步骤:

S109、当注册界面全部刷新完成后,关闭线程池,快速释放线程池中的资源。

本发明实施例基于Android的应用程序冷启动优化系统,主要用于实现上述实施例的方法,如图5所示,该系统包括启动模块、线程池模块、数据发送模块和注册界面模块。其中:

启动模块,用于启动应用程序;

线程池模块,用于开启线程池任务,通过多条子线程并行对应用程序启动过程中的所有数据进行初始化;

数据发送模块,用于将初始化后的数据发送给应用程序的注册界面;

注册界面模块,用于对接收到的初始化数据进行解析并刷新注册界面。

优选地,线程池选用定长线程池,该定长线程池可控制线程最大并发数,超出的线程在队列中等待。

优选地,注册界面模块还用于在线程池任务开启后,通过预定义的默认数据代替未初始化好的数据,以快速显示注册界面。

若某一子线程中的数据初始化完成,则将初始化好的数据封装在广播里面,然后再发送出去。

数据的封装过程为:将初始化好的数据通过Android系统中的数据存储工具进行存储,不同数据调用不同的存储函数进行存储。

数据存储工具可选用Android系统中的Bundle,数据的封装过程具体为:

如果为int数据,则调用Bundle中的putInt函数将int数据存储到Bundle中。

如果为string数据,则调用Bundle中的putString函数将String数据存储到Bundle中。

如果为long数据,则调用Bundle中的putLong函数将long数据存储到Bundle中;

如果为float数据,则调用Bundle中的putFloat函数将float数据存储到Bundle中。

注册界面模块可具体通过监听广播接收数据,并对接收的数据进行解析,根据数据类型调用不同的函数获取相应的数据。

本发明的另一实施例中,线程池模块还用于在注册界面全部刷新完成后,则关闭线程池,快速释放线程池中的资源。

应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1