介绍
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框架:
- Android开发利器-FSS开源框架之fss_common
- Android开发利器-FSS开源框架之方法运行优先级
- Android开发利器-FSS开源框架之绑定
- Android开发利器-FSS开源框架之ListView,RecyclerView适配器
如果想要了解fss框架的具体使用,我为大家提供了demo工程
网友评论