Giter Club home page Giter Club logo

alibaba / alpha Goto Github PK

View Code? Open in Web Editor NEW
1.9K 63.0 224.0 1004 KB

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

HTML 67.89% CSS 3.42% Java 28.69%
android

alpha's Issues

关于框架的设计的一些疑惑。

运行了sample和阅读了框架源码之后发现,如果task是运行是主线程的,通过handler post出去,虽然是在主线程初始化,但是如果这类代码在application里面运行,则会因为图的首节点AnchorTask在异步执行之后切回主线程运行,会丢失了“阻塞”效果。 如果有一些初始化功能需要在onCreate进行,在首个activity之前完成初始化,则框架不适用了。对此,想请教下:

  1. 是否支持为用户暴露api支持自己定义AnchorTask的线程场景;
    2.AnchorTask 只是为了做一些project状态的回调,运行在独立的线程是否有些浪费。
    谢谢。

Handle exception when there is a cycle

There is no cycle in theory but we have to handle exceptions like below which cause cycle in graph.

builder.add(TASK_B).after(TASK_A);
builder.add(TASK_A).after(TASK_B);

This will cause alpha never ends.

I think its a good idea to add a Validator to detect if graph is valid before execution.

SplashActivity执行耗时任务

SplashActivity执行耗时任务,有传SplashActivity的上下文对象到task

如果SplashActivity销毁了,但是task里的任务还没执行完,会怎样?

This repository is empty.

Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又…

怎样设置在所有的初始化任务都完成后,再结束Application.onCreate()?

假设我有一个初始化要比较耗时,比如读取一个很大的配置文件,它要耗时2秒,读取文件可以用Task异步执行,
但这个配置文件很重要,项目里到处都要用到,
alpha有没有办法做到,在Application.onCreate()里初始化读取配置文件,此时把主线程挂起,直到任务完成后,再恢复主线程,Application.onCreate()执行完成,继续下一步,进入主页?

如果自己要做这个需求,只能是在Application.onCreate()里直接调用方法,同步执行,
感觉这种操作不适合做异步,
就是想问问,alpha框架有没有办法完成这样的需求。

关于 OnTaskFinishListener 执行时刻疑惑

我看到 Task 中,对于OnTaskFinishListener的执行是如下条件进行的。

void notifyFinished() {
    if (!mSuccessorList.isEmpty()) {
        AlphaUtils.sort(mSuccessorList);

        for (Task task : mSuccessorList) {
            task.onPredecessorFinished(this);
        }
    }

    if (!mTaskFinishListeners.isEmpty()) {
        for (OnTaskFinishListener listener : mTaskFinishListeners) {
            listener.onTaskFinish(mName);
        }
        mTaskFinishListeners.clear();
    }
}

这是否会造成后一个Task 已经被执行了,才调用前一个 Task的回调?我的理解,通常业务在使用这个回调时,应该是需要为后一个 Task 赋值某些执行条件,如果是这样,不知道这么做的出发点是什么?

通过读取“/proc/${pid}/cmdline” 获取的进程的名称不准确

举个例子:
PackageName:com.example.hello

通过“/proc/${pid}/cmdline” 获取的进程名称为:com.example.hello������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

获取应用下的其他进程也是这样:
com.example.hello:channel�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������

通过ActivityManager的RunProcesses可以获取到正确的进程名称
com.example.hello
com.example.hello:channel

gradle引入失败

gradle通过 implementation 'com.alibaba.android:alpha:1.0.0.1@aar' 引入失败,无法同步代码,提示:ERROR: Failed to resolve: com.alibaba.android:alpha:1.0.0.1
请问是方法不对吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.