当前位置: 首页 > 知识库问答 >
问题:

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

姬欣怡
2024-02-18

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

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

共有1个答案

谢海阳
2024-02-18

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

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

  1. 使用singleTask或singleTop启动模式而不是singleInstance模式。这两种模式不会创建一个新的任务栈,而是将活动附加到现有的任务栈中。这样,当用户返回应用时,系统会恢复正确的活动状态。
  2. 在Activity2中实现一个特定的逻辑来处理用户的返回手势。你可以在Activity2的onBackPressed()方法中编写逻辑,以便在用户执行返回手势时,将系统导航到前一个活动(即Activity1)。例如:
@Overridepublic 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()方法中编写逻辑。例如:
@Overrideprotected void onResume() {    super.onResume();    // 编写逻辑来处理返回桌面再进入应用的情况    if (!isTaskRoot()) {        Intent intent = getIntent();        finish();        startActivity(intent);    }}

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

 类似资料:
  • 服务启动事件 function onWorkerStart(\swoole_server $server,$workerId); 此事件在Worker进程/Task进程启动时发生。这里创建的对象可以在进程生命周期内使用,需要注意的是 Task进程也会触发此事件 发生致命错误或者代码中主动调用exit时,Worker/Task进程会退出,管理进程会重新创建新的进程,也会触发本事件 onWorkerS

  • 服务启动前事件 function beforeWorkerStart(\swoole_server $server); 在执行beforeWorkerStart事件时,框架已经完成的工作有: frameInitialize 事件内的全部事务 frameInitialized 事件内的全部事务 错误处理函数的注册 swoole_http_server对象创建,且设置了启动参数。(未启动) 在该回调事

  • 本文向大家介绍Spring Boot 定义系统启动任务的多种方式,包括了Spring Boot 定义系统启动任务的多种方式的使用技巧和注意事项,需要的朋友参考一下 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( Servlet、Filter、Lis

  • 本文向大家介绍Android系统设置中的清除数据会清除哪些数据?,包括了Android系统设置中的清除数据会清除哪些数据?的使用技巧和注意事项,需要的朋友参考一下 What will be removed If you click Clear Data Button in the System Application 今天中的一个story突然提到了系统设置中的清理数据,后来开始思考究竟系统的应用

  • 我想知道有没有一种方法可以在显示系统对话框时获取事件(例如任务管理器、关闭警报、...)。 我可以通过下面的意图关闭我的活动中的系统对话框 但是在我的代码中,我需要知道屏幕上显示了一个系统对话框(它们可以是任务管理器/关闭对话框……),这样我就可以调用上面的代码来关闭它。 我搜索了意图过滤器没有找到。

  • 我正在android studio中建立我的第一个应用程序,但当我试图打开它时,我的应用程序崩溃了。我对此很陌生,我甚至不知道我能给你看些什么来解决我的问题。 我该怎么做才能解决这个问题呢? 这是我从Logcat得到的: