Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alibaba/alpha
Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。
https://github.com/alibaba/alpha
android
Last synced: about 1 month ago
JSON representation
Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中。框架会自动并发有序地执行这些task,并将执行的结果抛出来。
- Host: GitHub
- URL: https://github.com/alibaba/alpha
- Owner: alibaba
- Created: 2018-05-18T02:24:43.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-12-14T07:24:47.000Z (almost 6 years ago)
- Last Synced: 2024-10-01T18:23:42.420Z (about 2 months ago)
- Topics: android
- Language: HTML
- Size: 980 KB
- Stars: 1,923
- Watchers: 63
- Forks: 225
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
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();
```