在后台打开新的 Android activity

Open new Android activity in background

总结
当应用程序在后台时,我可以从后台服务启动一个新的 activity,而不 将应用程序带到前台吗?

背景
假设我正在为 Android 开发 MyApp。此应用程序处理非常 敏感信息,因此我们需要在用户闲置一段时间后锁定该应用程序。

MyApp 有一个服务,MyService。与应用程序的不同用户交互会重置 MyService 中的 inactivity 计时器。当 inactivity 计时器到期时,服务启动一个新的 activity,LockActivity,它充当 MyApp 的屏幕锁。用户必须重新验证自己才能通过 LockActivity 并继续使用该应用程序。

一切正常,但有一个问题:当 LockActivity 启动时,它会将应用带到最前面。由于用户可能正在做其他事情(浏览 Facebook 或其他),她会感到恼火,这是理所当然的。

我用于从后台启动 activity 的代码是:

Activity topActivity = magicallyFindMyTopActivity(); // This part is not important; it works though
Intent intent = new Intent(this, LockActivity.class);
topActivity.startActivity(intent);

你知道避免这种情况的方法吗?

每隔一段时间检查后台服务中的安全性,现在有一个标志

boolean secure = true;

当时间到期时更新标志 secure = false;

在您的主 activity 中,每次检查标志,如果它为 false,则要求用户进行身份验证。 (不要创建任何新的 activity)

Activity 几乎每次都会向用户展示一些东西,这样用户就可以与之互动。

我认为最适合您要归档的内容是使用 OnResume 事件并检查一个字段,该字段指示应用程序是否安全。

像这样:

onResume(..){
  if(isSecured){
     _secureMyApp();
  }    
}

看看这个:

当 inactivity 计时器到期时,不要盲目地启动锁定 activity,只需设置一些变量,当您的应用恢复或启动时检查变量状态并首先显示锁定屏幕。