响应意图将应用程序保留在后台

问题描述

| 我的Android应用程序有一个不活动超时。超时时,我将用户返回到(始终)在后堆栈中的“登录”屏幕。我的SignIn类已设置为“ 0”,因此始终在后堆栈中运行的实例被重用。 我在超时时开始此意图:
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);
登录屏幕启动时,它会额外检查“ 2”意图。如果找到,它将显示一个“您已被注销”对话框。这一切都正常工作。 现在,我要解决问题:由于它基于计时器,因此无论我的应用程序位于前台还是后台,都可以触发该Intent。这是理想的,因为我不希望应用程序仅在后台无限期地保持登录状态。 但是,当应用程序在后台运行并且计时器到期时,此inactivityTimeout Intent将被触发,并将应用程序带回前台。现在不必紧急提醒用户已超时,因此我希望该应用程序处于后台状态,以免打扰当前操作。 我尝试将
FLAG_FROM_BACKGROUND
标志添加到我的Intent中,但应用程序仍处于前台。我不确定还可以尝试什么,或者如果这是我应该在Intent或接收活动中解决的问题。 谁能在我的意图中(或在响应活动中)建议实现此目标的方法。还是我在这里缺少概念性的东西?谢谢!     

解决方法

无需因年龄而主动撤销凭证。毕竟,在用户尝试重用这些凭据之前,该过程可能会终止。 每个活动都需要检查以查看用户是否具有有效的凭据。在该检查中,您还检查了年龄,如果凭证正确但过旧,则仅会使凭证检查失败。而且,如果凭据检查失败,您将启动登录活动。 这使您可以转储计时器。     ,您可以使用全局静态变量来检查应用程序是否在前台:
public static boolean isForeground = false;
在onPause的每个活动上,将变量设置为false 在每个活动onResume上将变量设置为true 这样,您就知道应用程序是否在前台。 达到超时后,如果活动处于前台,则触发该意图。 如果不是,请将全局静态变量设置为true。将在每个onResume上检查此变量,如果该变量为true,它将触发超时意图(这样,当您恢复应用程序时将被激发)。
public static boolean hasTimeout = false;
如果您在其中实现了BaseActivity并通过所有其他活动扩展了BaseActivity,这将变得更加容易。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...