我的应用程序中有这样的流程:
对于新用户:
启动画面 - >登录活动 - >家庭活动
对于已注册的用户:
启动画面 - >家庭活动
基本上启动画面有一个if else来决定要去哪个活动。用户首次登录后,其状态将保存在初始化变量中,以便下次启动登录活动。
现在情况就是这样。如果新用户登录并转到主页活动,然后注销。他被重定向到登录屏幕,这是应该发生的事情。但是,如果现有用户打开应用程序,他将显示启动画面并直接移至主页活动。现在,如果用户退出,他就会离开应用程序。发生这种情况是因为Login Activity没有创建任何实例,因此完成Home Activity会完成整个应用程序。 Logout实际上完成了Home Activity,自然是最后一个活动活动应该打开。哪个没有发生。
我想要做的是,我想实现一个逻辑,它将检查登录活动是否可用。如果它可用,那么将调用finish()
,否则将通过意图调用登录活动。
请告诉我如何实现这一目标。
P.S:我的应用使用自定义主题和自定义操作栏。如果我一起调用finish和Intent,或者我使用标志来清除现有的活动,那么就会出现一个奇怪的过渡效果,它会显示黑色标准操作栏一瞬间,从而产生糟糕的用户体验。
答案 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完成此登录活动。