只需要下面這行代碼(肯定還有其他的代碼)捧灰,當(dāng)然淆九,這是有限制的(。﹏毛俏。)炭庙,而且只是退出當(dāng)前的 task 而已!
BackFlow.finishTask(activity | fragment)
其實(shí)是我做了個(gè)開源項(xiàng)目(^__^)煌寇,拿出來給大家鑒賞下焕蹄,歡迎大家提意見
項(xiàng)目:https://github.com/xuyt11/androidBackFlow 歡迎關(guān)注和 star 。
功能:一個(gè)控制 Android 視圖( activity 與 fragment )回退的工具阀溶。
tip :這是一個(gè)回退工具腻脏,不是跳轉(zhuǎn)工具
解決思路
利用 startActivityForResult 鸦泳、onActivityResult 、setResult與finish(activity)來進(jìn)行實(shí)現(xiàn)永品。
如果我們每一次都是調(diào)用的 startActivityForResult 方法做鹰,那我們不就可以使用setResult與finish(activity),并在前一個(gè)視圖的onActivityResult方法中對(duì)finish_task類型的setResults進(jìn)行攔截鼎姐,然后再setResult與finish(activity)钾麸,這樣就可以進(jìn)行鏈?zhǔn)降囊晥D回退,直到最后一個(gè)activity炕桨,這樣當(dāng)所有的activity都finish之后饭尝,整個(gè)App就退出了!
限制
當(dāng)然献宫,這也是有限制條件的钥平,若在回退鏈中間有任何一個(gè)XXXActivity消耗過onActivityResult方法,則會(huì)停留在該XXXActivity姊途,不能繼續(xù)回退涉瘾。
因?yàn)檎麄€(gè)回退功能都是依賴于setResult方法將回退數(shù)據(jù),鏈?zhǔn)降膫鬟f給前一個(gè)activity的onActivityResult方法吭净,而在activity消耗了onActivityResult方法之后睡汹,是不會(huì)再調(diào)用該方法的。
現(xiàn)在發(fā)現(xiàn)的消耗onActivityResult方法的情況有:
1寂殉、切換task囚巴;
2、切換process友扰;
3彤叉、在startActivity時(shí),調(diào)用了intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
所以村怪,只能在single task && single process的環(huán)境中使用秽浇。