# alpha **Repository Path**: ouyangpengdev/alpha ## Basic Information - **Project Name**: alpha - **Description**: Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-23 - **Last Updated**: 2021-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![screenshot](/alpha_logo.png) # Alpha启动框架 --- Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。 由于Android应用支持多进程,所以Alpha支持为不同进程配置不同的启动模式。 ### 接入Alpha ```groovy compile 'com.alibaba.android:alpha:1.0.0.1@aar' ``` ### 使用指南 Alpha支持代码和配置文件的方式构建一个启动流程。 #### 使用Java代码构建 1.实现自己的Task类。继承Task类,在run()函数中实现该Task需要做的事情。 ```java public class SampleTask extends Task{ public SampleTask() { super("SampleTask"); } @Override public void run() { //do something, print a msg for example. Log.d(TAG, "run SampleTask"); } } ``` Task默认是在异步线程中执行的,如果这个Task需要在线程中执行,可以在构造函数中声明。 2.将Task组合成一个完整的Project。 可以用Task.ProjectBuilder依据各Task之间的依赖关系,将这些Task构建成一个完整的Project。 ```java private Task createCommonTaskGroup() { Task a = new TaskA(); Task b = new TaskB(); Task c = new TaskC(); Task d = new TaskD(); Task e = new TaskE(); Project.Builder builder = new Project.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); Project group = builder.create(); return group; } ``` ProjectBuilder生成的Project本身可以作为一个Task嵌入到另外一个Project中。 ```java private Task createCommonTaskGroup() { Task a = new TaskA(); Task b = new TaskB(); Task c = new TaskC(); Task d = new TaskD(); Task e = new TaskE(); Project.Builder builder = new Project.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); Project group = builder.create(); return group; } private void createProject() { Task group = createCommonTaskGroup(); Task f = new TaskF(); Project.Builder builder = new Project.Builder(); builder.add(group); builder.add(f); Project project = builder.create(); } ``` 3.为构建完成的Project配置对应的进程。 ```java AlphaManager.getInstance(mContext).addProject(project); ``` 4.执行启动流程 ```java AlphaManager.getInstance(mContext).start(); ``` #### 使用XML配置文件构建 1.在代码中实现自己的Task,这个和上面的一样。 2.在XML文件中描述整个Project。 ```xml ``` 3.加载配置文件,这里我将该配置文件命名为tasklist.xml,并且放在asset中。 ```java InputStream in = null; try { in = mContext.getAssets().open("tasklist.xml"); AlphaManager.getInstance(mContext).addProjectsViaFile(in); } catch (IOException ex) { ex.printStackTrace(); } finally { AlphaUtils.closeSafely(in); } ``` 4.执行启动流程 ```java AlphaManager.getInstance(mContext).start(); ```