【问题标题】: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 的现有实例放在前面。
  • 检查我的回答,如果有效请采纳!

标签: android launchmode


【解决方案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 中的上一个活动!

    【讨论】:

    • 我有一堆活动,这些活动可能很多。这不是解决方案。
    猜你喜欢
    • 2018-04-22
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多