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

android:launchMode=“singleTask”不阻止多个根活动共存

邵兴怀
2023-03-14

我的目的是确保任务中的根活动在任何情况下都只有一个实例。所以我设置了android:launchMode=“singleTask”,它在大多数情况下都能正常工作。

但是,如果我快速地将任务切换到其他人并多次返回,启动模式设置似乎会失去效果。我观察到,在销毁前一个实例之前,创建了一个新的活动实例,如下面捕获的日志所示。

请任何人帮助提供一个完美的解决方案,以确保在任何情况下都只使用一个根活动实例?

提前感谢

11-28 10:43:41.158: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onPause
11-28 10:43:41.158: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onResume
11-28 10:43:41.468: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onPause
11-28 10:43:41.468: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onResume
11-28 10:43:41.818: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onPause
11-28 10:43:41.868: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onCreate
11-28 10:43:42.848: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onStart
11-28 10:43:42.868: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onResume
11-28 10:43:42.868: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onPause
11-28 10:43:42.868: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onResume
11-28 10:43:42.868: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onStop
11-28 10:43:42.878: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@40523a90 onDestroy
11-28 10:43:42.928: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onPause
11-28 10:43:42.928: W/Launcher(15718): Function Called: com.firebear.launcher.Launcher@4054e0a8 onResume

共有1个答案

赵锐
2023-03-14

启动另一个活动时是否正在对根活动调用finish()?如果是,请删除该语句。

根活动通常只创建一次,只有在其被销毁时才会重新创建。这是正常的应用程序行为,没有在清单中设置任何标志。如果根活动已经存在,将调用onStart()onResume()

 类似资料:
  • 收到通知后,我启动一个活动,加载一个webview。它第一次运行良好,但当我第二次收到通知时,它会在现有的webview上打开一个新的webview。 我希望能够把活动放在前面,而不是创建一个新的网络视图,因为页面已经在后台打开了。 处理通知的函数: 我的网络视图活动: 我尝试使用webview的SaveInstanceState和restoreState,但没有成功。

  • 我读过很多关于这方面的文章,但也有2012年或更早的文章。 (我只是打算从数据库中读取和插入一些数据。)

  • 我正在运行一个spark作业,流上下文每60秒运行一次。问题是一批处理时间太长(由于计算和保存RDD和Parquet到云存储),一批无法在1分钟内完成。它结束于下一批继续进入并成为活动的(状态=处理)。过了一段时间,我有10个活动批处理,而第一个已经完成。结果,它明显减慢,没有一批能够完成。是否存在严格限制一次活动批处理的数量为1。 多谢了。

  • Looper的loop方法在ActivityThread的main方法中调用,并启动一个无限的< code>for循环,该循环遍历一个消息队列。当队列中没有更多的消息时,它调用< code>nativePollOnce方法,等待下一条消息。< br >所以我的问题是< br> 1 .如果它等待下一条消息,那么主线程将被阻塞,那么它如何将更多的消息队列加入队列。< br> 2 .如果它没有被阻塞,那

  • 问题内容: 我有多个包含要发送的消息的BlockingQueues。消费者数量可能少于队列数量吗?我不想遍历队列并继续轮询它们(忙于等待),并且我不想为每个队列都分配一个线程。相反,当任何队列中都有消息可用时,我想唤醒一个线程。 问题答案: 您可以做的一个技巧是让队列排队。因此,您要做的是只有一个阻塞队列,所有线程都订阅该队列。然后,当您将某些内容排队到其中一个BlockingQueues中时,您

  • 我有一个使用新工具栏的活动。在这个工具栏中,我只有一个图标...我的搜索视图图标。当我单击该图标时,它会在工具栏中打开一个EditText,并且能够写下我想要的东西。问题是,当我单击“搜索”图标时,我的活动(带有片段的帧布局)的内容被重新加载。 编辑: 另外:当单击图标时,它会重新加载活动并打开EditText,然后调用activity SearchResult,如果我在该活动中按后退按钮,我会返