其实是我做了个开源项目(^__^),拿出来给大家鉴赏下,欢迎大家提意见
项目:https://github.com/xuyt11/androidBackFlow 欢迎关注和 star 。
功能:一个控制 Android 视图( activity 与 fragment )回退的工具。
tip :这是一个回退工具,不是跳转工具
现在的开发同学应该对产品的需求有蛮多体会,就是好好的业务流程,在经过多次发版之后,从树形变成了网状,就算是自己写的,只要时间隔久了也要仔细的去阅读代码,才能再次小心翼翼的去修改。
业务流程的回退功能:
各种各样的多视图回退,造成了复杂的视图跳转逻辑。且这样造成了在回退过程中的多个视图,都有状态的判断逻辑。
所以,如果有一个工具,能够在我们需要回退的时候,就能回退到目标视图,将会降低代码的复杂及提高我们开发的速度。
BackFlow.finishTask(activity | fragment)
当然,这是有限制的(。﹏。),只是退出当前的 task 而已!
BackFlow.finishTask(activity | fragment)
or
BackFlow.build(BackFlowType.finish_task, activity | fragment).create().request()
BackFlow.request(activity | fragment, @NonNull Class<? extends Activity> atyClass)
or
BackFlow.build(BackFlowType.back_to_activity, activity | fragment)....create().request()
BackFlow.request(activity | fragment, @NonNull Class<? extends Fragment>... fragmentClazzs)
or
BackFlow.build(BackFlowType.back_to_fragments, activity | fragment)....create().request()
BackFlow.request(activity | fragment, @NonNull Class<? extends Activity> atyClass, @NonNull Class<? extends Fragment>... fragmentClazzs)
or
BackFlow.build(BackFlowType.back_to_activity_fragments, activity | fragment)....create().request()
BackFlow.request(activity | fragment, backActivityCount)
or
BackFlow.build(BackFlowType.back_activity_count, activity | fragment).setBackActivityCount(...).create().request()
BackFlow.request(activity | fragment, @NonNull Bundle extra, @NonNull Class<? extends Activity> atyClass)
BackFlow.hasExtra(Intent data)
BackFlow.getExtra(Intent data)
BackFlow.builder(BackFlowType.back_to_fragments, activity | fragment)....create().request()
@Override
public void startActivity(Intent intent) {
startActivityForResult(intent, BackFlow.REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (BackFlow.handle(this, getSupportFragmentManager().getFragments(), requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
static void request(@NonNull Activity activity, @NonNull Intent backFlowData) {
activity.setResult(RESULT_CODE, backFlowData);
activity.finish();
}
BackFlow.finishTask(activity | fragment)
startActivityForResult(intent, BackFlow.REQUEST_CODE);
public void request() {
BackFlow.request(activity, backFlowData);
}
static void request(@NonNull Activity activity, @NonNull Intent backFlowData) {
activity.setResult(RESULT_CODE, backFlowData);
activity.finish();
}
private static boolean canHandle(int resultCode, Intent data) {
return resultCode == RESULT_CODE && BackFlowType.isBackFlowType(data);
}
![]() |
1
stdying 2017-01-11 23:56:37 +08:00 via Android
我不知道该怎么回答
|
![]() |
2
YzSama 2017-01-12 09:36:14 +08:00
好详细。
|
![]() |
3
KNOX 2017-01-12 09:58:03 +08:00
个人看法:对项目的侵入性有点强
|
![]() |
4
xuyt OP @KNOX 对于侵入性,确实是很强,这个我确实没有考虑过,因为我是直接使用在公司项目中的。
只是需要注意在使用 launchMode 的时候,需要使用 startActivity4NonBackFlow 这个方法。 但是,对于非常繁琐的回退流程,我觉得使用这个应该是非常简便的。 所以,我们需要权衡两者的利弊。 |
![]() |
5
pcatzj 2017-01-13 10:11:41 +08:00
第一次看到这么长的 v 文(汗),我没有看完,但是看了开头一点,想问问,直接退出程序,设置 rootActivity 为 singleTask 或者直接杀进程实现不了吗,有什么优点吗?请不吝赐教。
fragment 部分没有看,但是安利一个库叫做 fragmentation ,对多 fragment 管理还不错。 |
![]() |
6
KNOX 2017-01-13 11:33:10 +08:00
@xuyt 正如你说的,这个库是你们公司使用的,所以其他公司的项目只会使用自己开发的类似的库,否则到时候出问题了谁能保证别人第一时间给我解决,你的库有可取的点,但是不一定适合其他项目,如果想扩散使用我建议是减少入侵性,接入容易,撤出也容易。
|
![]() |
7
xuyt OP 1 、设置 rootActivity 为 singleTask 有这样一个问题:
即在用户按下 home 键退出当前的 task 后,当再进入 task 时,在其上的所有 activity 都将被摧毁, 所以,你的业务直接就全部销毁了,只剩下一个 rootActivity 了。 最后,像手机中的电话 App 就是这个需求的,除非你的业务需求可以这样。 2 、关于直接杀进程: 可以看看这个: http://blog.csdn.net/u011277123/article/details/53579269 《 Android 疑难杂症之 KillProcess 和 System.exit 无效》讲的很详细 3 、我这个开源项目,其实是一个 Android 的视图回退工具,“退出程序”只是其中的一个功能类型(BackFlowType.finish_task),他还有其他 4 个功能类型。 4 、最后,欢迎大家多提意见 项目: https://github.com/xuyt11/androidBackFlow 欢迎关注和 star 。 |