我有一个启动接收器,它接收BOOT_COMPLETED事件并为我的应用程序启动默认活动,如下所示:
if(MyApplication.GetCurrentActivity()==null)
{
Intent mActivityIntent = new Intent(context, LauncherActivity.class);
mActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mActivityIntent);
}
启动后我正在设置活动。如果没有启动任何活动或上次启动的活动,GetCurrentActivity()将返回null。 到目前为止没有问题。
但是如果用户在启动LauncherActivity之前触摸了应用程序图标,则会创建两个相同活动的实例,因为它们处于两个不同的任务中(我猜)。如何防止这种情况并仅启动一个活动实例。
答案 0 :(得分:1)
尝试 -
if(MyApplication.GetCurrentActivity()==null)
{
Intent mActivityIntent = new Intent(context, LauncherActivity.class);
mActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
mActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(mActivityIntent);
finish();
}
<强>更新强>
然后您可以使用 FLAG_ACTIVITY_REORDER_TO_FRONT -
如果已启动的活动已经运行,则该标志将使已启动的活动被带到其任务的历史堆栈的前面.-
if(MyApplication.GetCurrentActivity()==null)
{
Intent mActivityIntent = new Intent(context, LauncherActivity.class);
mActivityIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
startActivity(mActivityIntent);
finish();
}
例如 -
考虑一项由四项活动组成的任务:
A, B, C, D
。如果D
使用解析为组件的Intent调用startActivity()
活动B,然后B将被带到历史的前面 使用此结果顺序堆栈:A, C, D, B
。
答案 1 :(得分:0)
您可以使用:
<activity
android:name="name"
android:label="label"
android:launchMode="singleTop">
</activity>
此活动只启动一个活动实例。现在,您可以实现onNewIntent()。
希望它可以帮助你:)