我有ActivityB,我希望在用户点击ActivityA上的按钮后从ActivityA启动。但是,我只想要从ActivityA一次启动ActivityB--如果用户返回ActivityA并再次点击该按钮,我不希望ActivityB启动。
但是,如果只关闭并重新打开应用程序,我希望重新启动。 (意思是,这与SharedPreferences解决方案的isFirstRun不同,在我的理解中,它一直保持设置,直到重新安装app。)
这样做的最佳方式是什么?
我当前的方法:我已经有一个Intent,我从ActivityA开始调用ActivityB。每次应用程序打开时都会创建此意图。我存储一个名为FirstTimeLaunch的布尔值并将其设置为true。如果FirstTimeLaunch为true,我会从ActivityA启动ActivityB,在我启动它后,我将FirstTimeLaunch设置为false。
我想知道我可以通过其他方式完成此行为。 有没有办法可以使用:
感谢我可以调查的任何线索或指示。 :)
答案 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);
}
}});
通过此代码按钮将创建活动,如果没有创建,则重新启动或恢复到将其放入前台。