【问题标题】:Launching an activity at its current state以当前状态启动活动
【发布时间】:2010-05-17 21:50:17
【问题描述】:

我正在尝试制作一个任务切换器并且我成功了。我唯一的问题是,当我启动活动时,它们会像新活动一样重新启动(例如,我正在写一封电子邮件,我按回家并进入我的活动,启动电子邮件,然后应用程序启动电子邮件回合又回来了到收件箱并且电子邮件丢失了)所以这不是真正的多任务处理。

这是我的步骤:

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);

`

这段代码有什么问题?我应该做一些不同的事情来获得它吗?

非常感谢您的任何回答。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    创建 Intent 时不应使用 Intent.FLAG_ACTIVITY_NEW_TASK,而应使用 FLAG_ACTIVITY_REORDER_TO_FRONT。

    【讨论】:

    • 非常感谢。您认为:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 是个好主意吗?文档说:如果设置,并且此活动是在新任务中启动或将现有任务置于顶部,那么它将作为任务的前门启动。您认为添加这样的标志是个好主意吗?
    【解决方案2】:

    对不起,如果我的解释有误,我是一个“菜鸟”,在这里只是告诉我我的经验,以改善人们搜索与我相同的答案的结果。

    事实上,我必须使用 intent.setFlag(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REORDER_TO_FRONT) 以获得最佳结果。更换不是最好的主意。

    当我想启动自己的应用程序时,不使用 FLAG_ACTIVITY_NEW_TASK 使电子邮件应用程序启动。因为电子邮件被“链接”到与我的应用程序相同的任务。

    但是卢卡斯,我认为你的回答是最好的。

    【讨论】:

      【解决方案3】:

      我想我找到了答案。让我用简单的话来说一下我做了什么,

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

      对于上述情况,我所做的是在清单中我做了一些这样的更改:

      <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:先生,我发布了这个答案,因为我教过它会帮助可能面临类似问题的人,我不认为这是一个很大的错误。我可能不是这方面的专家,但我分享了我的发现。就是这样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多