Android 11中singleInstance启动,上一个任务栈会被系统清理?

新手上路,请多包涵

过程:从Activity1使用singleInstance启动模式启动Activity2,然后将应用滑至后台管理视图,再返回应用,滑至后台管理视图时Activity1已经经历了onDestroy。

尝试过添加taskAffinity,并添加excludeFromRecents,但是这并不符合预期,Activity2会消失在后台管理视图,并且activity2在前台运行的前提下通过home返回桌面再进入会先进入activity1再闪到activity2。
想要的实现效果类似【TT语音】应用进入房间后返回手势回到前个页面,再通过应用内的悬浮窗进入房间

阅读 1.2k
avatarAI BotBETA

在Android 11中,当使用singleInstance启动模式启动Activity时,系统确实会清理上一个任务栈。这意味着,如果从Activity1使用singleInstance启动模式启动Activity2,然后将应用滑至后台管理视图,再返回应用,滑至后台管理视图时Activity1会经历onDestroy。这是因为singleInstance活动被视为一个独立的任务,它总是在自己的任务栈中运行,并且不会与其他活动共享任务栈。

要实现类似于【TT语音】应用的效果,即进入房间后返回手势回到前个页面,再通过应用内的悬浮窗进入房间,你可以尝试以下方法:

  1. 使用singleTask或singleTop启动模式而不是singleInstance模式。这两种模式不会创建一个新的任务栈,而是将活动附加到现有的任务栈中。这样,当用户返回应用时,系统会恢复正确的活动状态。
  2. 在Activity2中实现一个特定的逻辑来处理用户的返回手势。你可以在Activity2的onBackPressed()方法中编写逻辑,以便在用户执行返回手势时,将系统导航到前一个活动(即Activity1)。例如:
@Override
public void onBackPressed() {
    // 编写逻辑来处理返回手势
    Intent intent = new Intent(this, Activity1.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}
  1. 如果你希望在Activity2处于前台运行时,通过home键返回桌面再进入应用时能够直接进入Activity2,而不是先进入Activity1,你可以在Activity2的onResume()方法中编写逻辑。例如:
@Override
protected void onResume() {
    super.onResume();
    // 编写逻辑来处理返回桌面再进入应用的情况
    if (!isTaskRoot()) {
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }
}

这些方法可以帮助你实现类似于【TT语音】应用的效果,通过特定的逻辑来处理用户的操作和系统导航。记得在实际应用中进行测试和调整,以确保效果符合你的需求。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题