我的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