我的Android應用程序有一個不活動超時。超時時,我將用戶返回到「登錄」屏幕,該屏幕始終位於後退堆棧中。我的SignIn類設置了android:launchMode="singleTop"
,因此在堆棧中運行的實例總是被重用。保持應用程序在後臺響應意圖
我開始對超時此意圖:
Intent inactivityTimeout = new Intent(this, SignIn.class);
inactivityTimeout.putExtra(INTENT_EXTRA_INACTIVITY_TIMEOUT, true);
int flags = inactivityTimeout.getFlags();
flags = flags|FLAG_FROM_BACKGROUND|Intent.FLAG_ACTIVITY_CLEAR_TOP;
inactivityTimeout.setFlags(flags);
當簽到屏幕啓動時,它會檢查INTENT_EXTRA_INACTIVITY_TIMEOUT
意向額外費用。如果找到,它會顯示「您已被註銷」對話框。這一切都正常工作。現在
我去拿的問題:由於它是基於一個計時器,這種意圖可以不管,如果我的應用是在前景或背景發射了。這是所希望的,因爲我不希望應用程序因爲它在後臺而無限期地保持登錄狀態。
但是,當應用程序在後臺並且計時器到期時,將關閉此inactivityTimeout Intent並將應用程序帶回到前臺。現在並不急於提醒用戶現在他們已超時,所以我寧願應用停留在後臺以便不中斷當前操作。
我嘗試添加了FLAG_FROM_BACKGROUND
標誌,我的意圖,但應用程序仍帶到前臺。我不確定還有什麼要嘗試的,或者如果這是我應該在我的意圖或我的接收活動中處理的問題。
任何人都可以提出一個方法在我的意圖來實現這一點(或響應活動?)。或者我在這裏錯過了一些概念?謝謝!
+1更簡單(也更符合邏輯)解決方案 – Aleadam 2011-05-25 18:24:07
感謝Mark!這非常有幫助。然而,我愚蠢地忽略了至少一些細節:首先,非活動超時是本地的,並在用戶執行任何操作時重置(我使用onUserInteraction())。其次,當應用程序處於前臺時發生超時時,我希望Intent在沒有任何其他用戶交互的情況下觸發。這就是計時器派上用場的地方(我在活動改變時重置它,並在onUserInteraction() - 如果它運行到0它將啓動意圖)。 – Jordan 2011-05-25 19:14:19
無論如何,正如你所建議的,我可以更新憑證的值(如'timeOfLastAction')來跟蹤最近的用戶操作。不過,我必須定期檢查這些憑據是否有效(即不足以觸發超時),並顯示對話框,如果它們自上次檢查以來已變得無效。爲了實現這個功能,我必須保留計時器,對吧? – Jordan 2011-05-25 19:14:48