在項(xiàng)目中要實(shí)現(xiàn)用戶退出登錄的功能,當(dāng)用戶點(diǎn)擊退出登錄按鈕后,跳轉(zhuǎn)到登錄頁面的 Activity ,直接用 startActivity() 跳轉(zhuǎn),點(diǎn)擊返回鍵后仍會(huì)回到退出前的 Activity 。
如果使用下面這句代碼給 intent 設(shè)置 Flag
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
在第一次登錄時(shí)有效,因?yàn)橛脩舻谝淮蔚卿洉r(shí)會(huì)在登錄頁面輸入賬號(hào)密碼進(jìn)行登錄,然后跳轉(zhuǎn)到主頁面。這樣在退出登錄時(shí),會(huì)回到之前經(jīng)過的登錄 Activity ,任務(wù)棧會(huì)將登錄頁面
Activity 之上的 Activity 全部清空,按返回鍵不會(huì)回到主頁面。
但是在用戶已經(jīng)登錄過之后,由于賬號(hào)密碼已經(jīng)保存,不需要再次輸入進(jìn)行登錄,不會(huì)經(jīng)過登錄 Activity , 這樣在退出登錄后按返回鍵仍會(huì)返回到主頁面。
使用 FLAG_ACTIVITY_CLEAR_TASK , FLAG_ACTIVITY_NEW_TASK 即可解決。代碼如下:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
注意是 addFlags() 不是 setFlags()
谷歌官方文檔提到, Intent.FLAG_ACTIVITY_CLEAR_TASK 要起作用,必須和 Intent.FLAG_ACTIVITY_NEW_TASK 配合使用。
這兩個(gè) Flag 可以將原有任務(wù)棧清空,并將 intent 的目標(biāo) Activity 作為任務(wù)棧的根 Activity 。任務(wù)棧的 Id 沒有變,如下所示,也就是說,并沒有開辟新的任務(wù)棧。
I/得到TaskId: 19959
I/得到TaskId: 19959