只需要下面这行代码(肯定还有其他的代码),当然,这是有限制的(。﹏。),而且只是退出当前的 task 而已!
BackFlow.finishTask(activity | fragment)
其实是我做了个开源项目(^__^),拿出来给大家鉴赏下,欢迎大家提意见
项目:https://github.com/xuyt11/androidBackFlow 欢迎关注和 star 。
功能:一个控制 Android 视图( activity 与 fragment )回退的工具。
tip :这是一个回退工具,不是跳转工具
解决思路
利用 startActivityForResult 、onActivityResult 、setResult与finish(activity)来进行实现。
如果我们每一次都是调用的 startActivityForResult 方法,那我们不就可以使用setResult与finish(activity),并在前一个视图的onActivityResult方法中对finish_task类型的setResults进行拦截,然后再setResult与finish(activity),这样就可以进行链式的视图回退,直到最后一个activity,这样当所有的activity都finish之后,整个App就退出了!
限制
当然,这也是有限制条件的,若在回退链中间有任何一个XXXActivity消耗过onActivityResult方法,则会停留在该XXXActivity,不能继续回退。
因为整个回退功能都是依赖于setResult方法将回退数据,链式的传递给前一个activity的onActivityResult方法,而在activity消耗了onActivityResult方法之后,是不会再调用该方法的。
现在发现的消耗onActivityResult方法的情况有:
1、切换task;
2、切换process;
3、在startActivity时,调用了intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
所以,只能在single task && single process的环境中使用。