Android startActivity 后下层 activity 不进入 pause

今天在优化我司的 Flutter 内容保护(auto-lock)锁屏,为了在安卓端区分被应用被外部应用遮挡进入后台还是由应用内部原生界面遮挡,查看了 startActivity 相关文档,原本想通过 intent 的相关配置来实现从 A-Activity 进入 B-Activity 后,A 不会触发 onPause 生命周期。

结果无论用什么参数,B 配置为何种 modeA 总会走 onPause --> onResume 这个生命周期,这个生命周期流程,跟 应用进入后台/切换到其他应用 是一致的,没法对此进行区分从而决定何时保护我们应用内部内容。

android:windowIsTranslucent

经过一番学习,在 theme 配置中找到了 android:windowIsTranslucent 这个选项,文档中只是说明了他的行为是将此 Activity 声明为一个 半透明 窗口,但没有说可以使 background Activity 虽然会失去焦点但不会被 pause

产生这个「能力」的原因,奶爸推测是因为新的 Activity 声明为半透明之后,系统为透过新的 Activity 可以看到旧的 Activity,不会 pause 旧的 Activity。

借助这个参数提供的能力,我们可以在 Flutter 中通过 WidgetsBindingObserver 分辩这两种情况:

  1. 应用内拉起其他 Activity:MainActivity(Flutter): inactive -> resume
  2. 其他应用遮挡/进入后台/应用内其他未启用该参数的 Activity:MainActivity(Flutter): inactive -> paused -> resume

Comments