我的应用程序有三个主要活动。
- 飞溅活动
- 登录活动
- 菜单活动
当我启动应用程序时,启动屏幕工作四秒钟,然后进入登录活动。如果用户登录成功,则应用程序进入菜单活动。在我的菜单中,有注销按钮。如果用户单击它,则应用程序将进入登录活动。它工作正常。但是如果用户不想注销并单击设备上的后退按钮,我想直接退出应用程序。如果我找不到这个问题的解决方案,用户必须进入登录屏幕,然后启动屏幕,最后在他们想使用后退按钮退出应用程序时退出。我应该使用哪种解决方案?
我的应用程序有三个主要活动。
当我启动应用程序时,启动屏幕工作四秒钟,然后进入登录活动。如果用户登录成功,则应用程序进入菜单活动。在我的菜单中,有注销按钮。如果用户单击它,则应用程序将进入登录活动。它工作正常。但是如果用户不想注销并单击设备上的后退按钮,我想直接退出应用程序。如果我找不到这个问题的解决方案,用户必须进入登录屏幕,然后启动屏幕,最后在他们想使用后退按钮退出应用程序时退出。我应该使用哪种解决方案?
登录成功后,您可以finish()
在启动菜单活动后立即调用登录活动。这有效地从后台堆栈中删除了登录活动。
编辑:正如下面评论中提到的,这也适用于您的 Splash 活动。
@Keyboardsurfer 提供的解决方案非常适合您,但如果您想处理后退按钮事件,请使用以下代码获取有关后退按钮事件的通知。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
// your code to handle back button event.
return true;
}
return super.onKeyDown(keyCode, event);
}
登录成功后,您应该调用您的菜单活动,如下所示:
Intent intent=new Intent(LoginActivity.this,MenuActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
this.finish();
如果用户通过 SharedPreferences 登录,我认为您正在检查您的 Splash 活动,您应该以您在调用这两个活动中的任何一个时指定的相同方式关闭您的 Splash 活动。
您必须覆盖 Activity(仅限 Splash)的 onPause 方法:
方法如下;
@Override
protected void onPause() {
super.onPause();
this.finish();
}
并在登录活动中在登录内容完成后调用完成方法。答案已编辑(请参阅下面的讨论)
我不认为它会在 other 中导致意外行为Activities
,只是它的Splash Activity
原因是它onPause()
被覆盖而不是其他的,并且因为 splash 只被调用一次,我认为这并不重要。