生命周期和活动堆栈

时间:2012-08-12 09:51:02

标签: android android-activity android-ui android-notifications android-lifecycle

在应用程序活动中堆叠如下:A - > B - > C - > D - > E. 如果我收到特定通知并单击它,则会启动Activity E. 如果我然后单击后退(电话上的按钮或操作栏上的按钮),则应用程序退出。

在这种情况下如何转换到Activity D,然后通过C,B和A转换?

我的后退代码:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        break;
    }
    return true;
}

正常启动应用程序时一切正常。问题是Activity从通知开始。

2 个答案:

答案 0 :(得分:3)

Android具有您内置的功能,并且已经有详细记录。首先,您应该查看TaskStackBuilder类。它是在JellyBean中引入的,但已经包含在the support library中,您可以使用它来构建合成的TaskStack,这就是您所需要的。文档摘要如下:

  

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

     

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

如何构建它取决于应用中活动的关系,但Tasks and Back Stack开发人员指南是一本很好的解决方案,可帮助您做出决定,Navigating with Up and Back设计指南也是如此。如果这对你来说都是新的。

您可以在培训部分的Implementing Effective Navigation课程中找到一些代码示例,也可以在Android开发者网站上找到。

顺便说一下,ActionBar上的按钮被称为 Up 。即使它有时与后退按钮具有相同的功能,但两者并不相同(我假设你正在谈论的那个;-)。)

答案 1 :(得分:1)

我认为您可以通过将活动E中的意图发送到活动D来解决您的问题,依此类推。 因此,您应该覆盖方法

onBackPressed()

单击后退按钮时调用。