如何解决响应意图将应用程序保留在后台
| 我的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,这将变得更加容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。