標籤:
Android應用如果跟帳號相關,一般都不允許一個帳號在多台裝置上同時登入,當發生這種情況的時候就要把頁面跳轉到登入頁要求使用者重新登入。下面是發生這種情況的時候應用回退棧的情況:
這時有下面幾種可能發生的情況:
1.使用者使用剛才的帳號重新登入:
在啟動HomeActivity的時候,只要加上 Intent.FLAG_ACTIVITY_CLEAR_TOP標誌就可以把HomeActivity上面的Activity彈出,使HomeActivity成為棧頂。
2.使用者使用另外一個帳號登入:
按照上面的方法,還要確保HomeActivity重新獲得螢幕焦點的時候,顯示目前使用者的資訊,而不是之前使用者的資訊(簡單的實現就是把載入頁面的工作放在onResume()方法裡)。
3.使用者直接點擊返回鍵退出時:
可以直接調用 android.os.Process.killProcess(android.os.Process.myPid()); 簡單粗暴地結束掉當前進程。
上面針對的都是一些簡單的情況,實際工作的時候遇到的情況要比這個複雜得多。工作當中的HomeActivity往往包含一個viewpager,viewpager又對應了多個Fragment。在這個前提下,發生上述第二種情況的時候簡直就是一場災難(每個fragment都要恢複為目前使用者的狀態)!下面是我當前項目中的HomeActivity。下面是一個tab欄,每個標籤都對應一個fragment。
如果按照之前的方法,就是老老實實維護每個fragment的狀態,使他們始終與目前使用者保持同步。但是邏輯太複雜了,把所有情況都考慮到寫出來的代碼就沒法看了!
繼續回到我們的問題,其實問題的本質就是非棧頂Activity的維護問題。如果我們跳轉到登入頁的時候,棧底沒有任何Activity,這樣不就跟初次登入時一樣了,一切問題不都迎刃而解了嗎?
下面是我的思路:
在Application裡面維護一個Activity列表,Activity建立時把自己加入這個列表中,銷毀時把自己從這個列表中移除。如果Activity只是回到後台了
Android 處理使用者被迫下線