检查某项活动是否在其他活动中处于活动状态

时间:2014-11-13 09:14:59

标签: java android android-activity activity-lifecycle activity-finish

我的应用程序中有这样的流程:

对于新用户:

启动画面 - >登录活动 - >家庭活动

对于已注册的用户:

启动画面 - >家庭活动

基本上启动画面有一个if else来决定要去哪个活动。用户首次登录后,其状态将保存在初始化变量中,以便下次启动登录活动。

现在情况就是这样。如果新用户登录并转到主页活动,然后注销。他被重定向到登录屏幕,这是应该发生的事情。但是,如果现有用户打开应用程序,他将显示启动画面并直接移至主页活动。现在,如果用户退出,他就会离开应用程序。发生这种情况是因为Login Activity没有创建任何实例,因此完成Home Activity会完成整个应用程序。 Logout实际上完成了Home Activity,自然是最后一个活动活动应该打开。哪个没有发生。

我想要做的是,我想实现一个逻辑,它将检查登录活动是否可用。如果它可用,那么将调用finish(),否则将通过意图调用登录活动。

请告诉我如何实现这一目标。

P.S:我的应用使用自定义主题和自定义操作栏。如果我一起调用finish和Intent,或者我使用标志来清除现有的活动,那么就会出现一个奇怪的过渡效果,它会显示黑色标准操作栏一瞬间,从而产生糟糕的用户体验。

5 个答案:

答案 0 :(得分:2)

  

现在,如果用户退出,他就会离开应用程序。这是因为   登录活动没有创建任何实例,因此   完成家庭活动完成整个应用程序。

如果我理解了您的问题,为什么不在用户点击Login Activity按钮后手动拨打logout

我一直用你喜欢的应用程序做的事情

答案 1 :(得分:1)

当用户登录完成登录活动并开始主页活动时。 当用户注销完成家庭活动并开始登录活动时

答案 2 :(得分:0)

您始终可以通过意图调用登录活动。如果活动可用,android将显示此活动。否则android会自动创建新活动。 实际上,这就是我们使用意图来显示活动而不是手动创建活动的原因。系统捕获了这个意图并做了所有肮脏的工作。

答案 3 :(得分:0)

编辑:

嗯,但你不会有过渡问题吗? (如果您已经登录,然后注销 - 使用intent / finish(),您将获得相同的黑色操作栏问题吗?)

也许考虑一下(我实际上是在我的应用中做到了这一点):

合并启动画面并登录到一个活动,具体取决于您是否已登录 - 显示登录字段或进入主屏幕。然后你有一个开箱即用的一致活动堆栈,无论用例如何,没有mambo-jumbo我是否已经拥有这个或没有。


我无法评论,因为我缺少4个代表,所以我会在这里发布答案:

我认为@Blaze Tama是对的。您还可以在意图上使用FLAG_ACTIVITY_CLEAR_TOP以避免堆栈流问题:

来自docs:

  

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。

答案 4 :(得分:0)

如果用户已登录,请始终立即启动登录活动并立即启动主页活动。

在启动画面活动中

Intent intent = new Intent(this, Login.class);
If (user already logged in)
{
    intent.putextra("Logged in", true);
}

startActivity(intent); 

在登录活动中

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    if (intent != null)
    {
        if (intent.getBooleanExtra("Logged in", false))
        {
            startActivityForResult(new Intent(this, Home.class), requestCode);
        }
    }
    else
    {
        // The existing code here
    }
}

在Home活动中,发回代码以指示用户是否已注销或仅返回BackPress。如果BackPress完成此登录活动。