Skip to content
forked from alibaba/alpha

Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。

Notifications You must be signed in to change notification settings

offend/alpha

Repository files navigation

screenshot

Alpha启动框架


Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。
在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。
由于Android应用支持多进程,所以Alpha支持为不同进程配置不同的启动模式。

接入Alpha

compile 'com.alibaba.android:alpha:1.0.0.1@jar'

使用指南

Alpha支持代码和配置文件的方式构建一个启动流程。

使用Java代码构建

1.实现自己的Task类。继承Task类,在run()函数中实现该Task需要做的事情。

publicclassSampleTaskextendsTask{publicSampleTask(){super("SampleTask")} @Overridepublicvoidrun(){//do something, print a msg for example.Log.d(TAG, "run SampleTask")} }

Task默认是在异步线程中执行的,如果这个Task需要在线程中执行,可以在构造函数中声明。
2.将Task组合成一个完整的Project。
可以用Task.ProjectBuilder依据各Task之间的依赖关系,将这些Task构建成一个完整的Project。

privateTaskcreateCommonTaskGroup(){Taska = newTaskA(); Taskb = newTaskB(); Taskc = newTaskC(); Taskd = newTaskD(); Taske = newTaskE(); Project.Builderbuilder = newProject.Builder(); builder.add(a); builder.add(b).after(a); builder.add(c).after(a); builder.add(d).after(b, c); builder.add(e).after(a); Projectgroup = builder.create(); returngroup}

ProjectBuilder生成的Project本身可以作为一个Task嵌入到另外一个Project中。

privateTaskcreateCommonTaskGroup(){Taska = newTaskA(); Taskb = newTaskB(); Taskc = newTaskC(); Taskd = newTaskD(); Taske = newTaskE(); Project.Builderbuilder = newProject.Builder(); builder.add(a); builder.add(b).after(a); builder.add(c).after(a); builder.add(d).after(b, c); builder.add(e).after(a); Projectgroup = builder.create(); returngroup} privatevoidcreateProject(){Taskgroup = createCommonTaskGroup(); Taskf = newTaskF(); Project.Builderbuilder = newProject.Builder(); builder.add(group); builder.add(f); Projectproject = builder.create()}

3.为构建完成的Project配置对应的进程。

AlphaManager.getInstance(mContext).addProject(project);

4.执行启动流程

AlphaManager.getInstance(mContext).start();

使用XML配置文件构建

1.在代码中实现自己的Task,这个和上面的一样。 2.在XML文件中描述整个Project。

<projects> <projectmode="mainProcess"> <taskname="TaskA"class="com.wireless.wireless.alpha.ConfigTest$TaskA"executePriority="8"mainThread="true"/> <taskname="TaskB"class="com.wireless.wireless.alpha.ConfigTest$TaskB"predecessor="TaskA"/> <taskname="TaskC"class="com.wireless.wireless.alpha.ConfigTest$TaskC"executePriority="4"predecessor="TaskA"/> <taskname="TaskD"class="com.wireless.wireless.alpha.ConfigTest$TaskD"threadPriority="-5"predecessor="TaskB,TaskC"/> <taskname="TaskE"class="com.wireless.wireless.alpha.ConfigTest$TaskE"/> <!--<task--><!--name="TaskE"--><!--class="com.wireless.koalainitializer.ConfigTest$TaskE"/>--> <taskname="TaskF"class="com.wireless.wireless.alpha.ConfigTest$TaskF"mainThread="true"predecessor="TaskC"/> <taskname="TaskG"class="com.wireless.wireless.alpha.ConfigTest$TaskG"threadPriority="-5"predecessor="TaskC"/> </project> <projectmode="secondaryProcess"> <taskname="TaskA"class="com.wireless.wireless.alpha.ConfigTest$TaskA"mainThread="true"/> <taskname="TaskB"class="com.wireless.wireless.alpha.ConfigTest$TaskB"predecessor="TaskA"/> <taskname="TaskC"class="com.wireless.wireless.alpha.ConfigTest$TaskC"executePriority="8"predecessor="TaskA"/> <taskname="TaskD"class="com.wireless.wireless.alpha.ConfigTest$TaskD"predecessor="TaskB,TaskC"/> </project> </projects>

3.加载配置文件,这里我将该配置文件命名为tasklist.xml,并且放在asset中。

InputStreamin = null; try{in = mContext.getAssets().open("tasklist.xml"); AlphaManager.getInstance(mContext).addProjectsViaFile(in)} catch (IOExceptionex){ex.printStackTrace()} finally{AlphaUtils.closeSafely(in)}

4.执行启动流程

AlphaManager.getInstance(mContext).start();

About

Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML67.7%
  • Java28.9%
  • CSS3.4%