当我想将现有的活动放在前面时,活动正在再次创建

Posted

技术标签:

【中文标题】当我想将现有的活动放在前面时,活动正在再次创建【英文标题】:Activity is creating again when i want to bring existing one to front 【发布时间】:2019-05-30 23:48:35 【问题描述】:

我添加了 REORDER_TO_FRONT 标志以将我现有的活动置于顶部,而不是创建新实例。但它调用的是活动的onCreate方法,而不是MainActivity中的onNewIntent。如果我在 Menifest 中添加 launchMode="singleTop",则可以正常工作。但我不想添加 singleTop,因为在某些情况下,如果用户在最小化模式下单击应用程序图标,那么应用程序会重新启动,而不是从同一个地方恢复。

    Intent intent = MainActivity.newIntent(context);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

谢谢

【问题讨论】:

嘿@Usman Rana 您是要完成当前活动然后显示上一个活动还是显示上一个活动并隐藏当前活动? 我想清除所有活动,包括当前活动并将 MainActivity 的现有实例放在前面。 检查我的回答,如果有效请采纳! 【参考方案1】:

您只需将 SINGLE_TOP 标志添加到您的 Intent,如下所示:

Intent intent = MainActivity.newIntent(context);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这会将堆栈中的所有活动移回MainActivity 的现有实例。它不会创建MainActivity 的新实例或调用onCreate()。它将在MainActivity() 中调用onNewIntent()

【讨论】:

【参考方案2】:

如果您想关闭所有其他活动并仅启动主要活动,这应该适合您:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

希望这可以帮助:)

【讨论】:

我不想启动 MainActivity 的新实例,而是将现有实例置于顶部以避免再次调用 onCreate 方法【参考方案3】:

无需清除当前活动并显示上一个活动。只需使用finish() 方法,如下所示:

您可以在您的onBackPressed()toolbar 后退按钮单击上使用它:

onCreate()之外使用此代码:

@Override
public void onBackPressed() 
    finish(); //closes current activity

toolbar

toolbar.setNavigationOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
         finish(); //close current activity
    
);

单击 android 后退按钮时会调用 onBackPressed() 方法。它的默认值是super.onBackPressed(),它也调用了finish() 方法!此示例仅供参考。

单击工具栏后退按钮时会调用toolbar.setNavigationOnClickListener(...) 方法。但是为此,您必须在 onCreate() 方法的代码中添加这些行:

Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);

finish() 方法从 backstack 中删除当前活动,并显示存储在 backstack 中的上一个活动!

【讨论】:

我有一堆活动,这些活动可能很多。这不是解决方案。

以上是关于当我想将现有的活动放在前面时,活动正在再次创建的主要内容,如果未能解决你的问题,请参考以下文章

Google地图:恢复地图活动后未显示新标记

自定义ListView菜单的基本活动

当调用相同的活动时如何防止分数被覆盖

单击本地通知时无法打开现有的正在运行的活动

Azure 数据工厂 - 删除活动时出错

意图 - 如果活动正在运行,请将其放在前面,否则启动一个新活动(来自通知)