android 启动新活动时删除旧活动示例

iaqfqrcu  于 2023-01-28  发布在  Android
关注(0)|答案(5)|浏览(210)

我希望在创建新示例(同一Activity的示例)时删除旧Activity示例,但我需要在回栈中维护所有其他Activity(因此FLAG_ACTIVITY_CLEAR_TOP不够)。
例如,假设我有活动A、B和C,我开始:A-〉B-〉C-〉B。在第二个B活动开始时,我需要删除现有的B活动。因此,我现在有:A-〉C-〉B在跑...
任何帮助都感激不尽。

zdwk9cvp

zdwk9cvp1#

您可以使用Intent标志来删除前面的任务。希望这会有所帮助。

Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

此标志将导致在活动启动之前清除与活动关联的任何现有任务。也就是说,活动将成为其他空任务的新根,并且所有旧活动都将完成。

wkftcu5l

wkftcu5l2#

我可以通过重写onNewIntent

@Override
protected void onNewIntent(Intent intent) {

        Bundle extras = intent.getExtras();
        Intent msgIntent = new Intent(this, MyActivity.class);
        msgIntent.putExtras(extras);
        startActivity(msgIntent);
        finish();
        return;

    super.onNewIntent(intent);
}

使活动成为单个任务

<activity
        android:name=".MyActivity"
        android:launchMode="singleTask" >
    </activity>
5q4ezhmt

5q4ezhmt3#

似乎删除Activity并不像我想象的那么容易,因此不是一个完整的答案,但我将使用FLAG_ACTIVITY_REORDER_TO_FRONT。这不会杀死现有的Activity,而是将其移到栈顶。

Intent intent = new Intent(ctx, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

这将允许上面概述的活动导航。
我还是很感兴趣是否有人知道清除实际活动的方法。

wlp8pajw

wlp8pajw4#

@Override
  protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        finish();
        startActivity(intent);
       
  }

在清单文件中

<activity
      android:name=".MyActivity"
      android:launchMode="singleTask" > 
   </activity>
ldxq2e6h

ldxq2e6h5#

这个解决了我的

@Override
 protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    finish();
    startActivity(intent);
   
}

相关问题