当前位置: 首页 > 软件库 > 手机/移动开发 > >

alpha

授权协议 Readme
开发语言 Java
所属分类 手机/移动开发
软件类型 开源软件
地区 不详
投 递 者 谢和颂
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Alpha启动框架


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

接入Alpha

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

使用指南

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

使用Java代码构建

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

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。

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中。

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配置对应的进程。

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

4.执行启动流程

AlphaManager.getInstance(mContext).start();

使用XML配置文件构建

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

<projects>
    <project
            mode="mainProcess">
        <task
                name="TaskA"
                class="com.wireless.wireless.alpha.ConfigTest$TaskA"
                executePriority="8"
                mainThread="true"/>

        <task
                name="TaskB"
                class="com.wireless.wireless.alpha.ConfigTest$TaskB"
                predecessor="TaskA"/>

        <task
                name="TaskC"
                class="com.wireless.wireless.alpha.ConfigTest$TaskC"
                executePriority="4"
                predecessor="TaskA"/>

        <task
                name="TaskD"
                class="com.wireless.wireless.alpha.ConfigTest$TaskD"
                threadPriority="-5"
                predecessor="TaskB,TaskC"/>

        <task
                name="TaskE"
                class="com.wireless.wireless.alpha.ConfigTest$TaskE"/>

        <!--<task-->
                <!--name="TaskE"-->
                <!--class="com.wireless.koalainitializer.ConfigTest$TaskE"/>-->

        <task
                name="TaskF"
                class="com.wireless.wireless.alpha.ConfigTest$TaskF"
                mainThread="true"
                predecessor="TaskC"/>

        <task
                name="TaskG"
                class="com.wireless.wireless.alpha.ConfigTest$TaskG"
                threadPriority="-5"
                predecessor="TaskC"/>

    </project>



    <project
            mode="secondaryProcess">
        <task
                name="TaskA"
                class="com.wireless.wireless.alpha.ConfigTest$TaskA"
                mainThread="true"/>

        <task
                name="TaskB"
                class="com.wireless.wireless.alpha.ConfigTest$TaskB"
                predecessor="TaskA"/>

        <task
                name="TaskC"
                class="com.wireless.wireless.alpha.ConfigTest$TaskC"
                executePriority="8"
                predecessor="TaskA"/>

        <task
                name="TaskD"
                class="com.wireless.wireless.alpha.ConfigTest$TaskD"
                predecessor="TaskB,TaskC"/>


    </project>
</projects>

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

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.执行启动流程

AlphaManager.getInstance(mContext).start();
  • 图像处理(Alpha通道,RGB,...)祁连山(Adobe 系列教程)****的UI课程 一个也许很傻的问题,在图像处理中alpha到底是什么?   Alpha通道是计算机图形学中的术语,指的是特别的通道,意思是“非彩色”通道,主要是用来保存选区和编辑选区。  为什么用‘Alpha’代表透明度? l  Alpha 没有透明度的意思,不代表透明度。opacity 和 transparency 才和

  • 常用版本号: Alpha :软件或系统的内部测试版本,仅内部人员使用。一般不向外部发布,通常会有很多Bug,除非你也是测试人员,否则不建议使用,alpha 就是α,是希腊字母的第一位,表示最初级的版本,beta 就是β,alpha 版就是比beta还早的测试版,一般都是内部测试的版本。 Beta :公开测试版。β是希腊字母的第二个,顾名思义,这一版本通常是在Alpha版本后,该版本相对于Alpha

  • 什么是Alpha通道 阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度。 例如:一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。在这种情况下,它要么表示透明要么不是,因为阿尔法比特只有0或1两种不同表示的可能性。 又如一个使用32个比特存储的位图,每8个比特表示

  • 克隆巴赫系数 Cronbach’s alpha 是量表问卷信度(Reliability)的一个指标,一般大于 0.7 表示问卷的信度可以接受,大于 0.8 表示问卷的信度良好,大于 0.9 表示问卷的信度优秀。 1. 信度与效度 信度即测量的一致性,表示若问卷中的问题重复很多次问同一个人,这个人的回答总是一致的。效度是衡量问卷中的问题能否测量出它应该测量的事物的成都,例如网上的一些 IQ 测试问题

 相关资料
  • 问题内容: 我有两个从png加载的BufferedImages。第一个包含图像,第二个包含图像的Alpha蒙版。 我想通过应用Alpha蒙版从两者创建组合图像。我的谷歌福使我失败。 我知道如何加载/保存图像,我只需要从两个BufferedImage到具有正确alpha通道的一个BufferedImage的位。 问题答案: 通过一次获取多个像素以上的RGB数据,可以改善您的解决方案(请参见http:

  • 问题内容: 我目前正在开发一个绘画程序(类似于Gimp和Photoshop),为了做到这一点,我将需要图层。我创建了一个名为JImage的类,其中包含和一些方法。 我的问题是,当您这样做时,不包括alpha层,并且背景始终为白色。这样可以防止我在没有丑陋的白色背景的情况下将其发送到文件中。有什么办法可以从具有alpha层的多个画布中获取图像?我希望将JavaFX用于此解决方案,因此请在JavaFX

  • 问题内容: 是否可以设置和获取布局的Alpha /不透明度及其所有子视图?我不是在说背景。在相对布局中说出视频控件的集合,例如播放,暂停和进度条。 我可以使用动画淡入淡出,但想知道是否可以使用直接方法。 问题答案: 您可以使用持续时间为0的AlphaAnimation和setFillAfter选项在布局及其子级(或其他任何视图)上设置Alpha。 例: 您可以将一个动画用于多个组件以节​​省内存。

  • 问题内容: alpha更改的速度快于其应有的速度。达到特定点后,不透明度降低,而控制台中打印的不透明度小于250。调整窗口大小会“重置”它,从而使Alpha正确。 如何使其正确绘制Alpha? 问题答案: 摇摆不支持透明背景。 Swing希望组件为: 不透明-表示组件将在进行自定义绘画之前首先用不透明的颜色重新绘制整个背景,或者 完全透明-在这种情况下,Swing将先绘制第一个不透明父级组件的背景

  • 本文向大家介绍什么是alpha测试---内部测试(未公开)相关面试题,主要包含被问及什么是alpha测试---内部测试(未公开)时的应答技巧和注意事项,需要的朋友参考一下 beta测试---用户公测

  • 问题内容: 如果我在Java中有一个int用作Android颜色(用于在Canvas上绘制),我该如何操作该int的alpha分量?例如,如何使用操作来做到这一点: 理想情况下,最好将第一个字节乘以任何值,而不是仅将字节设置为静态值。 问题答案: 查看Color类。 您的代码看起来像这样。 因此,将其包装在方法中可能类似于: 然后调用它以将透明度设置为50%: 我认为使用提供的Color类比直接自

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请

  • 问题内容: 根据Bootstrap 3文档,我向导航栏添加了以下属性: 向下滚动页面后,Bootstrap 4不会将类添加到后缀为navbar的页面。谁能告诉我如何解决这个问题?Bootstrap.js和jQuery.js正常运行。 问题答案: 尽管词缀在版本4中已从Bootstrap中删除。但是,您可以通过以下jQuery代码实现目标: