【问题标题】:Android: launchMode=SingleTask problemAndroid:launchMode=SingleTask 问题
【发布时间】:2011-05-16 12:39:14
【问题描述】:

我有一个围绕主要活动(主菜单)旋转的应用程序。在每个其他应用程序中,都有一个指向此活动的选项菜单项。

一开始,我总是在选择这个项目时开始一个新的主要活动。使用意图包,我确实告诉主要活动我在重新开始时所做的一些初始化是不必要的。

但是,我不太喜欢整体行为。我偶然发现了android:launchMode="SingleTask",这似乎有所帮助:现在我不会一直重新创建我的主菜单活动;另外,如果我按下“返回”按钮,我会直接返回主屏幕。这感觉就像一个适当的“主”菜单。

我现在的问题是:如果我运行我的应用程序的另一个活动,按主页按钮然后重新打开我的应用程序(例如使用“最后一个应用程序”),那么我不会回到上一个活动,而是回到主要的。另一个活动被破坏。

有什么想法可以实现SingleTask 的行为,而不能只返回一个活动?

【问题讨论】:

  • 很高兴您找到了解决问题的方法。对于未来的读者,我认为这里的根本原因与接受的答案状态无关,但实际上这里解释的“错误”:stackoverflow.com/questions/2417468/…

标签: java android android-activity launchmode


【解决方案1】:

如果您的其他活动在 Android 中以活动默认值正常声明,那么返回您的应用应该会将您带到您离开的同一活动(使用硬件主页按钮)

但请记住,Android 系统会在需要系统资源时终止应用程序。因此,当您转到其他应用程序时,您的应用程序可能已被终止。然后当你回到你的应用程序时,默认的启动器活动将重新启动,这是你的菜单活动。

要从任何活动返回主活动,请执行以下操作:

public static void goHome(Context context) {
        final Intent intent = new Intent(context, HomeActivity.class); //give name of your main activity class here
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
    }

这将清除活动堆栈并让您回到主要活动。当您声明 singleTop 时,它将把现有的主要活动带到前台。标志 Intent.FLAG_ACTIVITY_CLEAR_TOP 将删除主要活动顶部的堆栈中的所有活动。 (我假设您在同一个应用程序中)。

现在,您的所有其他活动只需要包含一个按钮,其点击侦听器调用方法goHome();

在您的主要活动中,如果您按下硬件后退按钮,它应该会退出您的应用。

【讨论】:

  • 我实际上希望有正常的行为。但是,如果我声明我的主要活动单个任务,如果我按下我的主页按钮,其他活动就会被破坏。我想要实现的是a)通过菜单快速链接到主活动,而不重新创建主应用程序和b)通过按下主活动中的后退按钮“关闭”整个应用程序。 (关闭的意思和主页按钮的效果一样。)但是,b)只是一个不错的选择,所以我主要想实现a)。 :-)
  • 现在我明白你的意思了。请参阅上面我编辑的答案。始终清楚您是在谈论硬件返回按钮还是软件返回按钮。
  • 非常感谢!这正是我想要的。以后我也会记住你的建议。 :-)
【解决方案2】:

为什么不对主要活动创建的活动调用finish()?这样您就可以返回主要活动,而无需创建新活动...

【讨论】:

  • 听起来不错,但有时我在实际活动和主要活动之间会有不止一项活动。有没有办法可以在两者之间关闭所有内容?
  • 可能有更好的解决方案,但是您可以在调用 onActivityResult 时调用 finish() 来关闭活动。您将在顶部活动上设置一些结果标志,例如“CLOSE”,并且基础活动将处理关闭。它会像这样,A 创建 B,B 创建 C。现在 C 调用 finish 并返回结果“CLOSE”,B 在 onActivityResult 中获取结果代码并通过调用 finish....
【解决方案3】:

我认为你应该在开始另一个活动之前保存你的活动状态,然后在你回到上一个活动时恢复你的活动。 参见 Android 的 Activity 生命周期 http://developer.android.com/guide/topics/fundamentals/activities.html

【讨论】:

  • 我很乐意这样做,但我不知道如何在不返回所有活动堆栈的情况下恢复我的主要活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多