繁体   English   中英

停止活动并重新启动它(android)

[英]Stopping an activity and restarting it (android)

我的应用程序上有一个登录屏幕,到目前为止,您可以按“后退”按钮返回到登录屏幕。 我不希望那样发生。

用户登录后,应用程序应停止登录活动,以便用户无法返回到该活动。 在菜单屏幕上,我有一个注销按钮,我想使用该按钮在停止后重新启动登录活动。

我一直在寻找和测试一个小时左右,但找不到答案。

清单中为您的登录活动设置noHistory = true 这样可以防止将活动存储在后堆栈中。

成功登录后,您可以调用Actvity.finish()

要重新启动登录活动,请使用Activity.startActivity(intent)

尝试以下任一方法:

登录成功完成登录活动后,请在启动下一个活动后在活动上调用finish()。 这将有效地破坏登录活动并将其从活动回栈中删除(因此无法再导航至该活动)。 就像是:

onLoginComplete(){
    startActivity(new Intent(this, NextActivity.class));
    finish();
}

或者,在登录活动的onResume中检查登录状态,如果为true,则完成。 这样,每当用户进行此活动时,如果已经登录,它将被关闭(并且他们永远不会真正看到它)。类似:

@Override
public void onResume(){
    super.onResume();
    if(isLoggedIn())
        finish();
}

当您在成功登录后离开登录屏幕时,调用finish()会将您的活动从堆栈中删除。

您的注销按钮应重新调用登录页面,如下所示:

Intent intent = new Intent(TheCurrentActivity.this, YourLoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

这将加载登录屏幕并清除当前活动堆栈,以确保注销后无法返回。

如果您不希望用户能够返回登录活动,只需将其添加到应用程序清单android:excludeFromRecents属性中的活动声明中,即可将其从最近的堆栈中排除,如下所示:

<activity android:name=".Login" android:excludeFromRecents="true"></activity>

然后,一旦您的登录活动完成任务,您(很可能)便会转到应用程序的下一个活动。 一旦您调用startActivity()来创建一个新的,只需调用finish(); 完成登录活动:

...
startActivity( intentToLaunchNextActivity );
finish();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM