根据Android的文档:
http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
“当用户离开按Home键任务,当前活动停止,其任务进入后台,系统保留在任务的每一次活动的状态。如果用户稍后通过选择启动器图标恢复任务始于任务,任务涉及到前台,并在堆栈的顶部重新开始活动。”
如果我理解正确这,这意味着:
- 活性A作为主要活动。
- 常见的,普通的意图实例 - 即获取一个开始,通过“startActivity”活动B。
- 我打开应用程序的第一次,一个被加载。
- 我在点击按钮和B的双头呆。
- 我按Home键。
- 我再次打开的应用程序,为第二次,和B预计将显示
...对? 我想这是正确的行为期待...
不过,我不是在我的应用程序看到这一点。
没有一个在顶部或最近一个 - 如果我点击“Home键”,然后继续我的应用程序,按下启动器图标,它将与主要活动开始。
我编码在三星Galaxy Tab的Android 2.2.1 - 我在Android清单最常用的选项 - 事情是,我处理这样不同的意图额外10个不同的活动 - 和Dispatcher类的方法 - 或保存每个活动状态 - 听起来很苛刻。
我使用的Eclipse IDE与ADT 12版; 我发现了一些很有趣的:
当我运行从Eclipse IDE中的应用程序,与我的设备连接,我没有看到这种行为。 该应用程序表现为在文档中阐明。 事实上,我看到这个后,才部署了我的apk在谷歌Play应用程序库; 并下载它来测试。
我的问题是,已经有人找到了真正的原因,为什么会这样? 是文档错了吗? 还是失去了一些东西? 这是Android上的错误吗?
我已经做了另一项研究是:
当我尝试我的应用程序,从谷歌Play下载,因为APK,如果我进入我的应用程序的第二次,我得到了“主要”活动,而不是最后一个双头呆的。 我按HOME。 按HOME键之后,我进入应用管理设置为Android,找到我的应用程序,然后点击“强行停止”。 这样做后,应用程序的文档表现为说。
有人帮助! :)
这是Android的平台中的错误:
http://code.google.com/p/android/issues/detail?id=2373
解决方法是,放置这在主要活动的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;
}
}
从提取的:
如何防止一个活动的多个实例时,它与不同的意图推出
...了3天寻找出这一点。
我只是要解释失败的原因,以及如何以编程方式重现此错误,因此您可以在您的测试套件包括这样的:
当您启动通过Eclipse或市场应用的应用程序,它意图标志启动:FLAG_ACTIVITY_NEW_TASK。
当通过发射器(家)推出,它使用标志:FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_BROUGHT_TO_FRONT | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,并用行动“MAIN”类和“ 启动器 ”。
如果您想重现这一在测试时,使用以下步骤:
adb shell am start -f 0x10000000 -n com.testfairy.tests.regression.taskroot/.MainActivity
然后做任何需要得到其他活动。 对于我而言,我只是放置一个按钮,启动另一个活动。 然后,回到发射器(家)用:
adb shell am start -W -c android.intent.category.HOME -a android.intent.action.MAIN
并通过模拟这个发射启动它:
adb shell am start -a "android.intent.action.MAIN" -c "android.intent.category.LAUNCHER" -f 0x10600000 -n com.testfairy.tests.regression.taskroot/.MainActivity
如果你还没有注册成立的isTaskRoot()的解决方法,这将重现该问题。 我们使用这个在我们的自动测试,以确保这个错误不会再发生。
希望这可以帮助!
该文档是正确的,唯一可能的问题,我能想到的,是造成这是要测试的设备,如果它按预期工作在模拟器上(这是普通的Android),它可以工作在至少90%的机器人会的,其生产故障为了这个,我相信不是Android系统。
文章来源: Android Activity Stack is not working as stated in the docs - last activity in task stack not shown