如何在每个会话中仅启动一次活动?

时间:2015-05-21 16:50:49

标签: android

我有ActivityB,我希望在用户点击ActivityA上的按钮后从ActivityA启动。但是,我想要从ActivityA一次启动ActivityB--如果用户返回ActivityA并再次点击该按钮,我不希望ActivityB启动。

但是,如果只关闭并重新打开应用程序,我希望重新启动(意思是,这与SharedPreferences解决方案的isFirstRun不同,在我的理解中,它一直保持设置,直到重新安装app。)

这样做的最佳方式是什么?

我当前的方法:我已经有一个Intent,我从ActivityA开始调用ActivityB。每次应用程序打开时都会创建此意图。我存储一个名为FirstTimeLaunch的布尔值并将其设置为true。如果FirstTimeLaunch为true,我会从ActivityA启动ActivityB,在我启动它后,我将FirstTimeLaunch设置为false。

我想知道我可以通过其他方式完成此行为。 有没有办法可以使用:

  • 共享偏好设置?
  • 会话管理?
  • 别的什么?!?!

感谢我可以调查的任何线索或指示。 :)

3 个答案:

答案 0 :(得分:0)

我认为您正在寻找如何在应用程序中管理任务。您可以在此处找到更多详细信息:

http://developer.android.com/guide/components/tasks-and-back-stack.html#ManagingTasks

我认为对您的要求有用的是使用'singleTask'作为Activity B清单条目的launchMode属性。

答案 1 :(得分:0)

在活动A中设置一个字段,表示活动B已经启动。将此值保存在活动A onSaveInstanceState(...)中,并在onCreate(...)onRestoreInstanceState(...)中恢复。

Application中设置值将无法可靠地运行。当活动A完成并重新启动时,可以重复使用相同的Application实例,而无需再次调用onCreate()。在任何地方设置静态值也是不可靠的。只要应用程序在后台,就可以销毁活动和应用程序 ,当重新创建时,静态值将不会自动恢复。

答案 2 :(得分:0)

我们可以有一个静态布尔值activityOpened变量,默认情况下为false,在void onCreate方法中它将为true,在onDesrtroy方法中它将再次为false。 现在关于ActivityA类按钮的onClickListner将如下所示......

    button.setOnClickListener(new View.OnClickListener() {
 @Override
            public void onClick(View view) {
    if(ActivityB.activityOpened)
    {Intent intent = new Intent(context, ActivityB.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);}
    else
    {
    Intent intent = new Intent(context, ActivityB.class);
    startActivity(intent);
    }
    }});

通过此代码按钮将创建活动,如果没有创建,则重新启动或恢复到将其放入前台。