美文网首页
Android方法运行优先级-FSS开源框架之FssRunpri

Android方法运行优先级-FSS开源框架之FssRunpri

作者: 飘哥x | 来源:发表于2019-07-17 21:09 被阅读0次

    介绍

    fss_runpriority实现了继承的方法可以在子类中自定义优先级执行。
    gitHub地址:https://github.com/gongbox/fss

    背景

    在Android开发中,Activity或Fragment中经常会用initView,initListener,initData三个方法来初始化,那么你可能会将这三个方法声明在父类中,然后子类继承实现即可,如下:

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          ...
          initView();
          initData();
          initListener();
      }
    
      protected void initView() {
      }
    
      protected void initData() {
      }
    
      protected void initListener() {
      }
    

    但如果这样做,initView,initData,initListener这三个方法的执行顺序固定了,然而有的时候我并不想以initView,initData,initListener 这样的顺序来执行,而是initView,initListener,initData或者其他顺序执行。fss_runpriority的出现便是为了解决这个问题。

    使用与集成

    implementation 'com.github.gongbox.fss:runpriority:{lastversion}'
    

    然后在父类注册需要调用的方法:

    //构造运行优先级方法
    RunPriorityInfo runPriorityInfo = new RunPriorityInfo.Builder(this)
                    .addMethod("initView") //对应方法:initView()
                    //可以传任意个参数,但是要求必须存在该方法
                    //.addMethod("initData", 12) 对应方法:initData(int xxx);
                    //.addMethod("initData", 15L,"hello") 对应方法:initData(long xxx,String xxx);
                    .addMethod("initData")
                    .addMethod("initListener")
                    .build();
    //调用运行优先级方法,默认调用顺序为:initView() -> initData() -> initListener(),子类可使用@RunPriority注解自定义调用顺序
    RunPriorityUtils.call(runPriorityInfo);
    

    下面看一个Android的Activity的例子

    class BaseActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ...
            //构造运行优先级方法
            RunPriorityInfo runPriorityInfo = new RunPriorityInfo.Builder(this)
                    .addMethod("initView")
                    .addMethod("initData")
                    .addMethod("initListener")
                    .build();
            //调用运行优先级方法,默认调用顺序为:initView() -> initData() -> initListener(),子类可使用@RunPriority注解自定义调用顺序
            RunPriorityUtils.call(runPriorityInfo);
        }
        
        protected void initView() {
        }
    
        protected void initData() {
        }
    
        protected void initListener() {
        }
    }
    

    然后子类就可以根据需要自定义优先级,如下:

    class TestActivity extends BaseActivity {
        //声明为高优先级,会优先调用
        @RunPriority(Priority.HIGH)
        @Override
        protected void initView() {
            super.initView();
            Log.i("RunPriority", "initView");
        }
    
        //声明为低优先级,会最后调用
        @RunPriority(Priority.LOW)
        @Override
        protected void initData() {
            super.initData();
            Log.i("RunPriority", "initData");
        }
    
        //声明为普通优先级,这也是默认的优先级,因此也可以不写
        //@RunPriority(Priority.NORMAL)  
        @Override
        protected void initListener() {
            super.initListener();
            Log.i("RunPriority", "initListener");
        }
    }
    

    上面的代码执行顺序是initView>initListener>initData。

    注意

    如果你的项目配置了混淆,请记得keep所有通过runpriority调用的方法

    更多FSS框架:

    如果想要了解fss框架的具体使用,我为大家提供了demo工程

    相关文章

      网友评论

          本文标题:Android方法运行优先级-FSS开源框架之FssRunpri

          本文链接:https://www.haomeiwen.com/subject/lnzclctx.html