代码之家  ›  专栏  ›  技术社区  ›  DavidAndroidDev

活动被触发太多次

  •  1
  • DavidAndroidDev  · 技术社区  · 15 年前

    还有一个问题。

    我们的应用程序从一个标签活动开始。但是,在用户进入选项卡活动进行工作之前,我们必须检查他们是否登录。此登录对于选项卡活动中的所有活动都是必需的。因此,我们没有在所有活动中进行这种安全检查,而是创建了自己的抽象“活动”,并让选项卡活动扩展我们的自定义活动。

    我们的“安全检查”(只需查看它们是否在首选项中有登录密钥和登录令牌)放在抽象活动的onresume()中。如果这些检查中的任何一项返回错误,我们将关闭登录活动并在该屏幕中使用对话框。 (我们这样做是因为我们不希望用户在没有登录的情况下能够看到选项卡上的数据,所以这个登录活动是一个黑色背景,带有用户名/密码对话框)。问题是,抽象活动的onresume()被多次调用,并多次启动登录活动。

    我们已经尝试在XML上为登录活动设置“singleInstance”和singleTask标志,但该活动最终在屏幕上显示之前调用了onActivityResult。

    2 回复  |  直到 15 年前
        1
  •  0
  •   lheezy    15 年前

    似乎您的安全检查在不应该返回时返回了false。根据您描述的安全检查逻辑,只有当安全检查返回false时,才会提示用户登录活动。因此,不应多次提示。我将从您的安全检查开始,并确保您正确检查了登录状态。

        2
  •  0
  •   DavidAndroidDev    15 年前

    发现了这里到底发生了什么。当用户以垂直模式启动应用程序时,应用程序直接进入登录屏幕,并且如预期的那样,OnResume仅被调用一次。但如果用户水平启动手机,手机将通过onresume运行垂直呼叫,在手机实际启动登录屏幕之前,将通过onresume水平运行。我唯一能想到的解决方法是使用静态实例计数,该实例计数在Activities onCreate时递增,在调用OnDestroy时递减。然后将该实例计数与键和令牌检查一起添加到if语句中,以查看是否有一个实例已经在运行。

    这解决了我的问题。不过,谢谢你的建议!