Android活动堆栈无法按照文档中的说明进行操作 - 未显示任务堆栈中的最后一个活动

Val*_* V. 2 stack android android-activity

根据Android文档:

http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

"当用户通过按Home键离开任务时,当前活动停止并且其任务进入后台.系统保留任务中每个活动的状态.如果用户稍后通过选择启动器图标恢复任务开始任务时,任务进入前台并恢复堆栈顶部的活动."

如果我理解正确,这意味着:

  1. 活动A作为主要活动.
  2. 通过"startActivity"开始在A中启动的活动B - 普通的普通意图实例.
  3. 我第一次打开应用程序,A加载.
  4. 我点击A中的按钮,B打开.
  5. 我按下主页按钮.
  6. 我再次打开应用程序,第二次,预计将显示B.

...对?我想这是正确的行为......

但是,我没有在我的应用程序中看到这一点.

如果我点击"主页按钮"然后恢复我的应用程序,通过按启动器图标,它将从主要活动开始 - 而不是顶部或最新的活动.

我在三星Galaxy Tab Android 2.2.1上编码 - 我在Android清单中有最常见的选项 - 事情是我处理10个不同的活动,具有不同的意图附加 - 以及Dispatcher类方法 - 或保存每个活动状态 - 听起来很苛刻.

我正在使用带有ADT版本12的Eclipse IDE; 我发现了一些非常有趣的东西:

当我从Eclipse IDE运行应用程序时,连接了我的设备,我没有看到这种行为.该应用程序的行为与文档中所述的相同.事实上,我只是在将我的apk部署到Google Play应用程序存储库后才看到这个; 并下载它进行测试.

我的问题是,有没有人找到这种情况发生的真正原因?文档错了吗?还是遗失了什么?这是Android上的错误吗?

我做的另一项研究是:

当我试用我的应用程序,从谷歌播放下载,作为APK,如果我第二次进入我的应用程序,我得到"主要"活动而不是最后一个开放.我按回家.按下主页后,我输入android的应用程序管理设置,找到我的应用程序并单击"强制停止".执行此操作后,应用程序的行为与文档中所述的相同.

有人帮忙!:)

Val*_* V. 9

这是android平台中的一个错误:

http://code.google.com/p/android/issues/detail?id=2373

解决方法是,将其放在主Activity的onCreate方法中:

if (!isTaskRoot())
{
    final Intent intent = getIntent();
    final String intentAction = intent.getAction(); 
    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN))
    {
        Log.w(LOG_TAG, "Main Activity is not the root.  Finishing Main Activity instead of launching.");
        finish();
        return;       
    }
}
Run Code Online (Sandbox Code Playgroud)

从中提取:

如何使用不同的意图启动活动时,如何防止活动的多个实例

...花了3天时间寻找这个.