当应用程序在React Native Android中进入后台时如何隐藏当前屏幕

时间:2018-09-28 15:55:49

标签: android react-native android-activity

我有一个react-native-init应用程序,该应用程序使用appState检测应用程序何时进入后台,以便隐藏用户正在使用的屏幕(例如电子邮件列表),并放置图片直到用户再次调用应用程序前台并通过身份验证。

这是为了防止任何人(检查哪些是当前打开的应用程序)看到用户在我的应用程序中检查的最后一个屏幕的外观,而改为查看图像(例如启动屏幕)。

这可以在iOS中轻松实现,因为iOS具有三个阶段:

  1. 有效:当应用在前台使用时。
  2. 无效:当应用处于过渡状态时,将变为后台。
  3. 后台:该应用已在后台。

因此,当应用程序无效时,组件状态中的标志会更改,并显示带有图像的组件,而不是当前屏幕。

handleAppStateChange = (nextAppState) => {
    if (nextAppState.match(/inactive|background/)) {
      this.setState({ showSplashScreen: true })
    }
    if (this.state.appState.match(/background/) && nextAppState === 'active') {
      this.setState({ showSplashScreen: false })
    }
  }

但是,android仅使用 active和background appStates ,因此当它进入后台时,该功能将以 background 作为 nextAppState调用并将状态中的标志 showSplashScreen 更改为true,但由于应用程序已经 background ,因此该组件不会对状态更改以及何时响应做出反应您查看打开的应用程序列表,仍然看到上一个使用过的屏幕,该屏幕可能包含敏感数据。

当应用程序进入后台时,是否有任何方法可以在react-native Android中进行检测,以便在进入后台之前可以用图像替换当前屏幕? >

2 个答案:

答案 0 :(得分:1)

Android内置的THere机制可防止敏感数据泄漏。使用它们,请勿尝试用图像覆盖-或至少不要单独依赖图像。

执行此操作的正确方法是在窗口上设置SECURE标志,以便Android OS为您解决此问题以及其他可能的问题,例如屏幕截图。这样做的代码是

getWindow()。setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);

可以在调用setContentView之前将其放置在活动的onCreate中。

答案 1 :(得分:0)

看看android应用的活动生命周期,您可以检查以下link

三个阶段可以为您提供帮助

onPause:在用户看不到活动时调用。

onStop:当用户不再看到活动时调用。

onResume:在活动将再次开始与用户互动时调用。

enter image description here