onResume 在显示透明 activity 时调用背景 activity

onResume called for background activity when showing transparent activity

我有一个要求从 Activity-AonResume 调用 API 并且如果需要,它的响应用于阻止用户使用该应用程序,方法是在 Activity-A[= 顶部显示 Activity-B 38=].

另一个要求是在 Activity-B 的 UI 中间有几条消息,并在 [=25] 屏幕的其余部分=]Activity-B透明。这些消息向用户显示他们被阻止的原因,并将他们重定向到 URL 以使自己不受阻止。

当用户 returns 来自重定向的 URL 时,同样的 API 从 Activity-B 的 onResume 检查当前状态。

现在的问题是,当显示 Activity-B 时,每当应用程序从后台返回到前台时,onResumeActivity-A 也被调用,这会导致双重 API 调用。

我使用以下主题样式使我的 Activity-B 透明:

<style name="Theme.AppCompat.Transparent.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

然后在 Activity-B

的清单中设置这个主题

Activity-B

public void onPause(){
    finish();
    super.onPause();
}

这将完成 Activity-B 并且下次用户返回应用程序时 Activity-A 将像往常一样处理 api 调用,并在必要时重新创建 Activity-B

虽然我不知道您的具体用例,但您可以只使用屏幕大小的 GONE 叠加层。当用户不应该使用该应用程序时,叠加层将设置为 VISIBLE。所有操作都由覆盖而不是其下方的视图使用,有效地将用户锁定在外,您将避免整个额外的 activity.