2012-04-03 57 views
0

可以說你有一個網絡應用相關的Android應用,需要用戶登錄才能使用它。用戶在登錄屏幕活動中登錄,然後繼續進行其他活動。每次用戶啓動一個活動時,應用程序都會再次檢查他的登錄憑證(憑證存儲在某個中央數據庫中)。如何踢用戶登錄屏幕活動通過堆棧中的所有其他應用程序活動?

隨着用戶從一個活動跳轉到另一個活動,讓我們假裝用戶的登錄憑證從服務中被吊銷。用戶下次訪問活動時,該應用會看到他不再有權限訪問該應用。現在應用程序應該將用戶踢回登錄屏幕活動。

但是由於應用程序在用戶使用應用程序時已經創建了一堆活動,因此您如何獲得登錄屏幕。你是否殺死/銷燬所有活動,直到你到達登錄屏幕活動(應該是應用程序的堆棧底部的活動)?

還是你開始一個新的登錄屏幕活動,並直接去那?

或者我應該通過FLAG_ACTIVITY_CLEAR_TOP呼叫登錄屏幕活動通過意圖?

用戶第二次登錄後(可以說他已經恢復了憑據),如果活動現在是堆棧中的唯一一個,那麼按下後退按鈕將使他退出應用程序,相反,在撤銷他的證書之前回到他正在做的事情上。什麼是最好的方法呢?

+0

對於你的問題沒有一個答案。它非常依賴於很多設計決策。 – Falmarri 2012-04-03 21:39:32

+0

是的,現在我意識到了。我不確定是否有最佳做法,人們使用這個或沒有。 – 2012-04-04 15:04:05

回答

2

我個人的選擇是設置您的所有活動(當然除了登錄活動)以檢查用戶的憑證onResume()(我通過繼承來完成此操作,所有活動都從摘要AuthorizedActivity繼承,但做什麼適合你)。如果用戶沒有憑據(或者因爲他們沒有他們或他們已被吊銷),那麼我的登錄活動就是這樣。如果LoginActivity返回一個有效的用戶,一切都很好。如果用戶與之前登錄的用戶有效但不同,那麼我將他們帶到我的根目錄FLAG_ACTIVITY_CLEAR_TOP。按下loginActivity上的後退按鈕並不會讓它們變好,因爲應用程序會直接將它們彈回到家中。

我發現該方法使我可以靈活地決定何時以及如何檢查/撤銷憑據,即使他們離開(簡要)應用程序。

+0

謝謝。你的意思是我假設「FLAG_ACTIVITY_CLEAR_TOP」? – 2012-04-04 15:04:51

+0

@Jakobud哎呀...是的 – JRaymond 2012-04-04 15:05:41

0

登錄屏幕活動與FLAG_ACTIVITY_CLEAR_TOP將工作,但將刪除所有用戶的歷史記錄。你是否在意他們是否續簽他們的證書,然後按回去?應該保留他們的歷史嗎?

您可以考慮登錄活動的FLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_NO_HISTORY

如果您希望以前的所有任務都重定向到登錄屏幕,請確保在onResume中執行檢查,以便在撤銷權限後不能返回堆棧。

請記住,您也可以在manifest<activity>元素上設置這些標誌。

相關問題