生命周期和活动栈

3
在应用程序中,活动的堆栈是这样的:A -> B -> C -> D -> E。如果我收到一个特定的通知并点击它,将会启动活动E。如果我接着点击返回按钮(在手机上或操作栏上的按钮),则应用程序退出。
在这种情况下,如何使过渡到活动D,并通过C、B和A返回?
我的返回按钮代码:
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        break;
    }
    return true;
}

当正常启动应用程序时,一切都很好。问题出现在从通知中启动 Activity 时。

2个回答

3
Android已经内置了你需要的功能,并且已经有很好的文档。首先,你应该看一下TaskStackBuilder类。它在JellyBean中被引入,但已经包含在支持库中,你可以使用它来构建一个合成的任务堆栈,这正是你所需要的。文档中的摘要如下:

从Android 3.0之后,当从一个任务堆栈跨越到另一个任务堆栈时,应用程序应该为新任务合成一个后退堆栈/历史记录,以便用户可以通过反复按下后退键从新任务导航回到启动器。后退键不应该在任务堆栈之间导航。

TaskStackBuilder提供了一种遵循正确的跨任务导航约定的方法。

你如何构建它将取决于你的应用程序中活动之间的关系,但是任务和返回堆栈开发人员指南是一个很好的阅读材料,可以帮助你做出决策,如果这对你来说是全新的,则使用向上和向后导航设计指南也是如此。
在Android开发者网站的培训部分中,实现有效的导航课程中会有一些代码示例。
顺便说一下,在ActionBar上的按钮称为向上。尽管它有时与返回按钮共享相同的功能,但两者并不相同(我假设你所说的就是这个;-)。)

1

我认为你可以通过从Activity E向Activity D发送一个意图来解决你的问题,等等。 因此,你应该重写这个方法。

onBackPressed()

当您点击返回按钮时,会调用该函数。


另一种方法可能是启动活动A并立即向活动B发送一个意图,该意图将一个人发送到C,依此类推。因此,您将拥有所需的活动堆栈。 - Steve

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