{"id":15032419,"url":"https://github.com/alibaba/alpha","last_synced_at":"2025-05-16T04:02:36.592Z","repository":{"id":41086346,"uuid":"133892205","full_name":"alibaba/alpha","owner":"alibaba","description":"Alpha是一个基于PERT图构建的Android异步启动框架，它简单，高效，功能完善。 在应用启动的时候，我们通常会有很多工作需要做，为了提高启动速度，我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系，所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的，使用者只需定义好自己的task，并描述它依赖的task，将它添加到Project中。框架会自动并发有序地执行这些task，并将执行的结果抛出来。","archived":false,"fork":false,"pushed_at":"2018-12-14T07:24:47.000Z","size":1004,"stargazers_count":1938,"open_issues_count":8,"forks_count":226,"subscribers_count":62,"default_branch":"master","last_synced_at":"2025-04-08T14:06:16.337Z","etag":null,"topics":["android"],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alibaba.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-18T02:24:43.000Z","updated_at":"2025-03-28T07:20:55.000Z","dependencies_parsed_at":"2022-07-14T08:09:36.100Z","dependency_job_id":null,"html_url":"https://github.com/alibaba/alpha","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Falpha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Falpha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Falpha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Falpha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alibaba","download_url":"https://codeload.github.com/alibaba/alpha/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464891,"owners_count":22075570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android"],"created_at":"2024-09-24T20:18:20.736Z","updated_at":"2025-05-16T04:02:35.536Z","avatar_url":"https://github.com/alibaba.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"![screenshot](/alpha_logo.png)\n\n# Alpha启动框架\n---\n\nAlpha是一个基于PERT图构建的Android异步启动框架，它简单，高效，功能完善。  \n在应用启动的时候，我们通常会有很多工作需要做，为了提高启动速度，我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系，所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的，使用者只需定义好自己的task，并描述它依赖的task，将它添加到Project中。框架会自动并发有序地执行这些task，并将执行的结果抛出来。  \n由于Android应用支持多进程，所以Alpha支持为不同进程配置不同的启动模式。  \n\n\n### 接入Alpha\n\n```groovy\ncompile 'com.alibaba.android:alpha:1.0.0.1@aar'\n```\n\n\n### 使用指南\nAlpha支持代码和配置文件的方式构建一个启动流程。\n#### 使用Java代码构建\n\n1.实现自己的Task类。继承Task类，在run()函数中实现该Task需要做的事情。\n\n```java\n\tpublic class SampleTask extends Task{\n        public SampleTask() {\n            super(\"SampleTask\");\n        }\n\n        @Override\n        public void run() {\n            //do something, print a msg for example.\n            Log.d(TAG, \"run SampleTask\");\n        }\n    }\n```\nTask默认是在异步线程中执行的，如果这个Task需要在线程中执行，可以在构造函数中声明。  \n2.将Task组合成一个完整的Project。  \n可以用Task.ProjectBuilder依据各Task之间的依赖关系，将这些Task构建成一个完整的Project。\n\n```java\n\t\tprivate Task createCommonTaskGroup() {\n        Task a = new TaskA();\n        Task b = new TaskB();\n        Task c = new TaskC();\n        Task d = new TaskD();\n        Task e = new TaskE();\n\n        Project.Builder builder = new Project.Builder();\n        builder.add(a);\n        builder.add(b).after(a);\n        builder.add(c).after(a);\n        builder.add(d).after(b, c);\n        builder.add(e).after(a);\n        Project group = builder.create();\n\n        return group;\n    }\n\n```\nProjectBuilder生成的Project本身可以作为一个Task嵌入到另外一个Project中。\n```java\n    private Task createCommonTaskGroup() {\n        Task a = new TaskA();\n        Task b = new TaskB();\n        Task c = new TaskC();\n        Task d = new TaskD();\n        Task e = new TaskE();\n\n        Project.Builder builder = new Project.Builder();\n        builder.add(a);\n        builder.add(b).after(a);\n        builder.add(c).after(a);\n        builder.add(d).after(b, c);\n        builder.add(e).after(a);\n        Project group = builder.create();\n\n        return group;\n    }\n\n    private void createProject() {\n        Task group = createCommonTaskGroup();\n        Task f = new TaskF();\n\n        Project.Builder builder = new Project.Builder();\n        builder.add(group);\n        builder.add(f);\n\n        Project project = builder.create();\n    }\n```\n3.为构建完成的Project配置对应的进程。\n\n```java\nAlphaManager.getInstance(mContext).addProject(project);\n```\n4.执行启动流程\n```java\nAlphaManager.getInstance(mContext).start();\n```\n\n#### 使用XML配置文件构建\n1.在代码中实现自己的Task，这个和上面的一样。\n2.在XML文件中描述整个Project。\n\n```xml\n\u003cprojects\u003e\n    \u003cproject\n            mode=\"mainProcess\"\u003e\n        \u003ctask\n                name=\"TaskA\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskA\"\n                executePriority=\"8\"\n                mainThread=\"true\"/\u003e\n\n        \u003ctask\n                name=\"TaskB\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskB\"\n                predecessor=\"TaskA\"/\u003e\n\n        \u003ctask\n                name=\"TaskC\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskC\"\n                executePriority=\"4\"\n                predecessor=\"TaskA\"/\u003e\n\n        \u003ctask\n                name=\"TaskD\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskD\"\n                threadPriority=\"-5\"\n                predecessor=\"TaskB,TaskC\"/\u003e\n\n        \u003ctask\n                name=\"TaskE\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskE\"/\u003e\n\n        \u003c!--\u003ctask--\u003e\n                \u003c!--name=\"TaskE\"--\u003e\n                \u003c!--class=\"com.wireless.koalainitializer.ConfigTest$TaskE\"/\u003e--\u003e\n\n        \u003ctask\n                name=\"TaskF\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskF\"\n                mainThread=\"true\"\n                predecessor=\"TaskC\"/\u003e\n\n        \u003ctask\n                name=\"TaskG\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskG\"\n                threadPriority=\"-5\"\n                predecessor=\"TaskC\"/\u003e\n\n    \u003c/project\u003e\n\n\n\n    \u003cproject\n            mode=\"secondaryProcess\"\u003e\n        \u003ctask\n                name=\"TaskA\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskA\"\n                mainThread=\"true\"/\u003e\n\n        \u003ctask\n                name=\"TaskB\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskB\"\n                predecessor=\"TaskA\"/\u003e\n\n        \u003ctask\n                name=\"TaskC\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskC\"\n                executePriority=\"8\"\n                predecessor=\"TaskA\"/\u003e\n\n        \u003ctask\n                name=\"TaskD\"\n                class=\"com.wireless.wireless.alpha.ConfigTest$TaskD\"\n                predecessor=\"TaskB,TaskC\"/\u003e\n\n\n    \u003c/project\u003e\n\u003c/projects\u003e\n```\n3.加载配置文件，这里我将该配置文件命名为tasklist.xml，并且放在asset中。\n\n```java\n\t\tInputStream in = null;\n        try {\n        \n            in = mContext.getAssets().open(\"tasklist.xml\");\n            AlphaManager.getInstance(mContext).addProjectsViaFile(in);\n\n        } catch (IOException ex) {\n            ex.printStackTrace();\n        } finally {\n            AlphaUtils.closeSafely(in);\n        }\n```\n4.执行启动流程\n\n```java\nAlphaManager.getInstance(mContext).start();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Falpha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falibaba%2Falpha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Falpha/lists"}