安卓 - 启动多个活动

39

是否可以同时启动多个活动?我的意思是,从主要活动中按某种顺序创建3个活动,只有最后一个活动可见?到目前为止,我只能创建一个活动。

谢谢


3
为什么需要这样做?一次只能有一个处于活动状态,所以即使你做多个,只有最后一个会显示,其他的都会暂停。 - Michell Bak
1
完全同意上面的评论。您应该重新考虑您的应用程序架构,为什么要启动一个对用户不可用的活动? - Egor
1
为什么需要同时启动多个活动? - Terence Lui
4
我需要恢复应用程序的状态,当它被关闭时。如果用户正在查看活动C,则我需要打开A、B、C(这些活动将被显示)。 - Waypoint
1
Android系统通常会负责记住活动栈。您是想在重新启动后保留活动栈或者类似的操作吗? - Kevin Reid
4个回答

48

例如,当用户点击通知以显示一些新添加的内容时,您可能需要类似这样的东西来启动应用程序的深入操作。

Intent i = new Intent(this, A.class);
i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(i);

Intent j = new Intent(this, B.class);
j.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(j);

Intent k = new Intent(this, C.class);
startActivity(k);

通过这种方式,您可以同时启动活动A、B和C,并抑制对活动A和B的转换。您将从当前活动到活动C获得单个转换。我强烈建议您在LogCat中记录Activity生命周期方法调用(例如onCreate等)。这对于了解事件顺序非常有帮助。


谢谢,它正在工作。但我有另一个要求。我有两个活动A和B。我需要使用startActivityForResult从B启动A。如果我这样做,A中的onActivityResult不会被调用。有什么办法吗? - kishorer747
似乎 @gmale 可以帮忙解决这个问题。 - Ewoks
抱歉,它应该做什么?我在第二个活动的onCreate()中进行登录(使用设置FLAG_ACTIVITY_NO_ANIMATION)。那个次要活动的onCreate()似乎从未被调用过。它应该像这样工作吗?我可以从我的主要活动的onCreate()中调用startActivity(secondary)吗?我如何调用次要活动的onCreate() - Vit Bernatik

26

这可能是对深层链接或其他用例的常见响应,基本上需要合成重建任务(及其应包含的所有活动)。有时,在清单中仅指定parents是不够的。

请查看TaskStackBuilder。一个常见的示例:

TaskStackBuilder.create( context )
        .addNextIntent( intentOnBottom )
        // use this method if you want "intentOnTop" to have it's parent chain of activities added to the stack. Otherwise, more "addNextIntent" calls will do.
        .addNextIntentWithParentStack( intentOnTop )
        .startActivities();

仅供参考,如果我们启动两个活动,比如A1和A2,如果A1有一个复杂的UI(如ViewPager + Fragment)或后台加载任务,则使用此解决方案可能会在启动A1然后启动A2时导致崩溃,而分别使用startActivity(Intent)可以很好地工作。 - Tuan Chau

21

3

在第一个Activity的onCreate方法末尾尝试使用startActivity(new Intent(...);。 这将立即启动一个新的Activity并暂停第一个Activity。 使用返回键可以返回到上一个Activity。


2
这种方法的问题在于,如果活动B在启动活动C后被系统杀死(完成),当用户通过点击“向上”按钮返回到活动B时,活动B的onCreate将再次尝试启动活动C。 - tmin
@tmin 这个问题可能可以通过使用“savedinstancestate”来解决。 - algrid

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