摘要
当应用程序在后台时,是否可以从后台服务启动新活动,没有将应用程序带到前端?
背景
假设我正在为Android开发MyApp。此应用处理非常敏感信息,因此我们需要在用户暂停一段时间后锁定应用。
MyApp有一项服务MyService。与应用程序的不同用户交互会重置MyService中的不活动计时器。当不活动计时器到期时,服务会启动一个新活动LockActivity,它充当MyApp的屏幕锁定。用户必须重新验证自己才能通过LockActivity并继续使用该应用程序。
这一切都有效,但有一个问题:当LockActivity启动时,它会将应用程序带到前面。由于用户可能正在做其他事情(浏览Facebook或其他),她会很生气,这是正确的。
我用于从后台启动活动的代码是:
Activity topActivity = magicallyFindMyTopActivity(); // This part is not important; it works though
Intent intent = new Intent(this, LockActivity.class);
topActivity.startActivity(intent);
你知道有什么方法可以避免这种情况吗?
答案 0 :(得分:1)
在某个时间间隔检查后台服务中的安全事项,现在有一个标志
boolean secure = true;
时间到期时更新标志secure = false;
在主活动中,每次检查标志是否为假,要求用户进行身份验证。 (不要创建任何新活动)
答案 1 :(得分:1)
Activity几乎每次出现在用户身上,因此用户可以与之互动。
我认为最适合您要归档的内容是使用 OnResume 事件并检查一个字段,该字段说明应用是否受到保护。
这样的事情:
onResume(..){
if(isSecured){
_secureMyApp();
}
}
看看这个:
答案 2 :(得分:0)
当不活动计时器到期时,不要盲目地启动锁定活动,只需设置一些变量,当您的应用程序恢复或开始检查变量状态并首先显示锁定屏幕时。