Skip to content

simplify your method coupling in android

Notifications You must be signed in to change notification settings

api888/WorkFlow

Repository files navigation

WorkFlow

Hex.pmHex.pm

简化顺序调用方法之间的嵌套和耦合:

  • 轻松替换方法调用之间的顺序关系

  • 提高代码简洁性和可读性、降低维护成本

  • 增删改方便,提高效率

Installation:

dependencies{implementation'com.qw:workflow:0.0.3' }

Usage:

场景示例1

依次顺序的展示Toast,Dialog,SnackBar:

privatestaticfinalintSTEP_TOAST = 1; privatestaticfinalintSTEP_DIALOG = 2; privatestaticfinalintSTEP_SNACK_BAR = 3; privatevoidstartWorkFlow(){newWorkFlow.Builder() .withNode(WorkNode.build(STEP_TOAST, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){//do any work you wantToast.makeText(MainActivity.this, "step for toast", Toast.LENGTH_SHORT).show(); newHandler().postDelayed(newRunnable(){@Overridepublicvoidrun(){//call it when finish workcurrent.onCompleted()} }, 2000)} })) .withNode(WorkNode.build(STEP_SNACK_BAR, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){Snackbar.make(findViewById(R.id.btn_after), "step for snack_bar", Snackbar.LENGTH_SHORT).show(); newHandler().postDelayed(newRunnable(){@Overridepublicvoidrun(){current.onCompleted()} }, 2000)} })) .withNode(WorkNode.build(STEP_DIALOG, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){newAlertDialog.Builder(MainActivity.this) .setTitle("step for show dialog") .setPositiveButton("complete", null) .setOnDismissListener(newDialogInterface.OnDismissListener(){@OverridepublicvoidonDismiss(DialogInterfacedialogInterface){current.onCompleted()} }).create().show()} })).create() .start()}

效果如图:

image

假如现在需要让Dialog和SnackBar,替换位置,只需要让Dialog定义值比SnackBar大即可:

privatestaticfinalintSTEP_TOAST = 1; privatestaticfinalintSTEP_DIALOG = 20; privatestaticfinalintSTEP_SNACK_BAR = 3;

效果如下:

image

场景示例2

进入APP首页按顺序请求3个接口,第一个接口和第三个接口成功后启动对话框,第二个接口跳转到Web页面

publicclassAfterActivityextendsAppCompatActivity{privatestaticfinalintREQUEST_CODE_H5 = 1; /** * 初次广告弹框 */privatestaticfinalintNODE_FIRST_AD = 10; /** * 初次进入h5页 */privatestaticfinalintNODE_CHECK_H5 = 20; /** * 初次进入的注册协议 */privatestaticfinalintNODE_REGISTER_AGREEMENT = 30; privateWorkFlowworkFlow; @OverrideprotectedvoidonCreate(@NullableBundlesavedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.activity_compare); ((TextView) findViewById(R.id.tv_desc)).setText("使用后"); startWorkFlow()} privatevoidstartWorkFlow(){workFlow = newWorkFlow.Builder() .withNode(getFirstAdNode()) .withNode(getShowRegisterAgreementNode()) .withNode(getShowH5Node()) .create(); workFlow.start()} privateWorkNodegetFirstAdNode(){returnWorkNode.build(NODE_FIRST_AD, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){Utils.fakeRequest("http://www.api1.com", newHttpCallBack(){@OverridepublicvoidonOk(){newAlertDialog.Builder(AfterActivity.this) .setTitle("这是一条有态度的广告") .setPositiveButton("我看完了", null) .setOnDismissListener(newDialogInterface.OnDismissListener(){@OverridepublicvoidonDismiss(DialogInterfacedialogInterface){//仅仅只需关心自己是否完成,下一个节点会自动执行current.onCompleted()} }).create().show()} @OverridepublicvoidonFailure(){//仅仅只需关心自己是否完成,下一个节点会自动执行current.onCompleted()} })} })} privateWorkNodegetShowRegisterAgreementNode(){returnWorkNode.build(NODE_REGISTER_AGREEMENT, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){Utils.fakeRequest("http://www.api2.com", newHttpCallBack(){@OverridepublicvoidonOk(){newAlertDialog.Builder(AfterActivity.this) .setTitle("这是注册协议") .setPositiveButton("我看完了", null) .setOnDismissListener(newDialogInterface.OnDismissListener(){@OverridepublicvoidonDismiss(DialogInterfacedialogInterface){current.onCompleted()} }).create().show()} @OverridepublicvoidonFailure(){current.onCompleted()} })} })} privateWorkNodegetShowH5Node(){return (WorkNode.build(NODE_CHECK_H5, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){Utils.fakeRequest("http://www.api3.com", newHttpCallBack(){@OverridepublicvoidonOk(){startActivityForResult(newIntent(AfterActivity.this, TestH5Activity.class), REQUEST_CODE_H5)} @OverridepublicvoidonFailure(){current.onCompleted()} })} }))} @OverrideprotectedvoidonActivityResult(intrequestCode, intresultCode, @NullableIntentdata){super.onActivityResult(requestCode, resultCode, data); switch (requestCode){caseREQUEST_CODE_H5: workFlow.continueWork(); break; default: break} } }

效果:

image

流程:

image

功能介绍:

  • 每个节点只关注自己是否完成:

    privateWorkNodegetFirstAdNode(){returnWorkNode.build(NODE_FIRST_AD, newWorker(){@OverridepublicvoiddoWork(finalNodecurrent){//仅仅只需关心自己是否完成,下一个节点会自动执行current.onCompleted()} })}
  • 可以操作WorkFlow对象来控制全局节点

    publicclassWorkFlow{/** * 标记为处理完成,调用后不再能执行任何开启的操作 */publicvoiddispose() /** * 给workflow添加一个工作节点 * * @param workNode 节点 */publicvoidaddNode(WorkNodeworkNode) /** * 开始工作,默认从第一个节点 */publicvoidstart() /** * 基于某个节点Id 开始工作 * * @param startNodeId 节点id */publicvoidstartWithNode(intstartNodeId) /** * 让当前工作流继续工作 * 效果等同于当前节点调用 Node.onCompleted */publicvoidcontinueWork() /** * 回退 * 基于最近节点回退至上一节点 */publicvoidrevert() }

更多代码可参考demo

GitHub地址

About

simplify your method coupling in android

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java100.0%