【问题标题】:How to return to an activity somewhere in the activity stack?如何返回到活动堆栈中某处的活动?
【发布时间】:2011-01-11 11:34:48
【问题描述】:

有人知道如果设备内存不足,是否有可能从活动堆栈中删除活动?我有一个调用 webbrowser 的活动 A 和一个网页然后调用一个活动 B 做某事然后应该返回到活动 A。我使用带有标志的这个意图..

Intent intent = new Intent(this, acticityToReturnTo.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

..从活动堆栈中删除 webbrowser 活动和活动 B 并返回到活动 A 但它不起作用。它始终是活动 A 的新实例,它被创建而不是恢复到已经存在的活动实例。 我不想在活动 A 上使用单实例标志,但这是目前对我有用的唯一解决方案..(我正在为 Android 1.6 开发)

也许有另一种解决方案来做我想做的事?

【问题讨论】:

    标签: android filter android-activity android-intent


    【解决方案1】:

    尝试使用

    startActivityForResult(意图);

    而不是

    开始活动(意图);

    【讨论】:

    • hm 对我没有任何改变:/ 我敢打赌这是因为网络浏览器活动。
    【解决方案2】:

    我宁愿从重新启动活动 A 的问题来考虑它,因为在您操作期间的任何时候都可能终止活动 A 或 B。

    当然,无论您是否重新启动它或从头开始重新创建它,您都可以返回到 Activity A,因为不能保证这可能不会发生。

    【讨论】:

    • 我认为你是对的,它不是一个好的设计,我现在改变了它,但它是否应该与 FLAG_ACTIVITY_CLEAR_TOP 标志一起使用,我认为它可以节省资源来重用现有的活动(如果它仍然存在)
    【解决方案3】:

    如果导航始终是 A->B->A,您可以在活动 B 上调用 finish(),它会返回到活动 A

    【讨论】:

    • 没有导航是 A->external webbrowser->B->A,我认为问题是我无法从活动堆栈中删除外部 webbrowser 活动
    【解决方案4】:

    浏览器和活动 A 是否在同一个任务中?您可以通过在控制台中输入 adb shell dumpsys activity 来检查这一点。

    【讨论】:

    • 我使用普通的 uri 意图来启动标准网络浏览器,因此浏览器不在同一个任务中。这有关系吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多