在其当前状态下启动一个活动

3
我正在尝试制作一个任务切换器,并且已经成功了。我的唯一问题是,当我启动活动时,它们会像新的活动一样重新启动(例如,我正在编写电子邮件,我按下主页并进入我的活动,启动电子邮件,然后应用程序启动电子邮件但返回收件箱且电子邮件丢失),这不是真正的多任务。
以下是我的步骤:
1)获取所有正在运行的应用程序: List<ActivityManager.RunningTaskInfo> allTasks = activityManager.getRunningTasks(30); 2)获取意图:
for (ActivityManager.RunningTaskInfo aTask : allTasks) {
        Intent i = new Intent(Intent.ACTION_MAIN);
        i.setComponent(aTask.baseActivity);
(...)

3)点击按钮启动应用程序:

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED).addCategory(Intent.CATEGORY_LAUNCHER);
    monthis.startActivity(intent);

这段代码有什么问题?我需要做些什么才能得到它呢?非常感谢任何回答。
3个回答

3

在创建意图时,您不应使用Intent.FLAG_ACTIVITY_NEW_TASK,而应该使用FLAG_ACTIVITY_REORDER_TO_FRONT。


非常感谢。你认为FLAG_ACTIVITY_RESET_TASK_IF_NEEDED是一个好主意吗? 文档中说:如果设置了此标志,并且此活动正在新任务中启动或将现有任务带到顶部,则它将作为任务的前门启动。在你看来,添加这样一个标志是个好主意吗? - Waza_Be

0

我想我找到了答案。让我用简单的话来告诉你我做了什么,

假设我有两个活动activity1和activity2,我从activity1导航到activity2(我在activity2中完成了一些工作),然后通过在activity1中单击按钮再次回到activity1。现在在这个阶段,我想回到activity2,并且我希望看到我的activity2处于上一次离开activity2时的相同状态。

对于上述情况,我所做的是在清单文件中进行了一些更改,如下:

<activity android:name=".activity2"
          android:alwaysRetainTaskState="True"
          android:launchMode="singleInstance">
</activity>

在 activity1 中的按钮点击事件中,我做了如下操作:

Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setClassName(this,"com.mainscreen.activity2");
startActivity(intent);

在activity2中,当按钮被点击时,我做了如下操作:

Intent intent=new Intent();
intent.setClassName(this,"com.mainscreen.activity1");
startActivity(intent);

现在发生的是,无论我们在activity2中进行了哪些更改,这些更改都不会丢失,我们可以以与之前相同的状态查看activity2。

我相信这就是答案,对我来说很有效。如果我错了,请纠正我。


@Jaco Briers先生:我发表了这篇回答,因为我认为它可能会帮助到遇到类似问题的人们,而且我不认为这是什么大错。虽然我不是专家,但我分享了我所发现的内容。就这样。 - roy mathew

0

如果我在解释中犯了错误,非常抱歉,我是个"新手",只是分享我的经验,以改善其他人寻找与我相同答案的结果。

事实上,我必须使用intent.setFlag(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REORDER_TO_FRONT)来获得最佳结果。替换并不是最好的想法。

不使用FLAG_ACTIVITY_NEW_TASK会在我想要启动自己的应用程序时启动电子邮件应用程序。因为电子邮件与我的应用程序"链接"到了同一个任务。

但是,Lucas,我认为你的答案是最好的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接