当前位置: 首页 > 面试题库 >

活动堆栈问题

微生毅然
2023-03-14
问题内容

我有两组活动,假设每组3个活动,(A1,B1,C1 || A2,B2,C2)我从A1启动我的App,然后-> B1-> C1在这里我想从C1跳到->
A2在A2处,如果我按回去,它应该存在该应用程序,而不是退回给C1,然后从A2导航到-> B2-> C2。

因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activity
Stack。那可能吗?有任何想法吗?


问题答案:

在我看来,您已经回答了自己的问题。你写了:

因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activity Stack。

我会这样:

创建一个DispatcherActivity启动应用程序时启动的活动。此活动是您任务的根源活动,并负责启动A1或A2,具体取决于…并且不finish()对其自身进行调用(即:它将被A1或A2覆盖,但仍位于活动堆栈的根目录中)。

在中A1,捕获“后退”键,并告诉DispatcherActivity这样退出:

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, DispatcherActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addExtra("exit", "true");
    startActivity(intent);
}

这将清除任务堆栈,直到根活动(DispatcherActivity),然后DispatcherActivity根据此意图重新开始。

在中C1,启动A2,执行以下操作:

Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);

这将清除任务堆栈,直到根活动(DispatcherActivity),然后DispatcherActivity根据此意图重新开始。

在中DispatcherActivityonCreate()您需要根据意图中的额外内容来确定要做什么,如下所示:

Intent intent = getIntent();
if (intent.hasExtra("exit")) {
    // User wants to exit
    finish();
} else if (intent.hasExtra("A2")) {
    // User wants to launch A2
    Intent a2Intent = new Intent(this, A2.class);
    startActivity(a2Intent);
} else {
    // Default behaviour is to launch A1
    Intent a1Intent = new Intent(this, A1.class);
    startActivity(a1Intent);
}

A2,陷阱“返回”键,并告诉DispatcherActivity使用相同覆盖的退出onBackPressed()作为A1

注意:我只是输入此代码,所以我还没有编译它,所以它可能不是完美的。你的旅费可能会改变 ;-)



 类似资料:
  • 问题内容: 我已经阅读了有关使用此功能的几篇文章,但一定会丢失一些东西,因为它对我不起作用。我的活动A在清单中有launchmode =“ singleTop”。它以launchmode =“ singleInstance”启动活动B。活动B打开浏览器并接收并返回意图,这就是为什么它是singleInstance的原因。我试图覆盖“后退”按钮,以便将用户发送回活动A,然后可以按“上一步”离开活动,

  • 好吧,所以我有点困惑该怎么处理这个。因此,我有了主活动,从那里可以启动一个活动到DegreePlan活动,从那里可以启动另一个活动到EditDegreeplan。我已经将EditDegreeplan设置为在Android清单中没有历史记录。问题是在他们保存EditDegreeplan后,它会启动一个活动到Degreeplan。因此,如果用户按下后退键,他们必须按两次才能再次进入主活动。我想摆脱它,

  • 举个例子, 我有活动 A、B、C、D A呼叫B 然后,B呼叫C 之后,C呼叫D 在活动D中,我调用。它将返回活动C。 我的问题是,在调用<code>finish() 不要建议在每次都调用 因为应用可以按回上一个活动以继续。

  • 问题内容: 我正在尝试转储所有活动线程的列表,包括每个线程的当前堆栈。我可以使用threading.enumerate()获得所有线程的列表,但是我不知道从那里到堆栈的方法。 背景:Zope / Plone应用程序有时会出现故障,消耗100%的cpu,需要重新启动。我觉得这是一个循环,无法正常终止,但是我无法在test- environemt中重现该循环以进行验证。我设法注册了可以从外部触发的信号

  • 我是Android编程新手。 我想了解如何为特定的Android应用程序维护活动堆栈,以及它如何根据用户导航进行更改。 例如,如果有多个活动,那么当用户单击“后退”按钮或“主页”按钮或启动新活动时,活动堆栈的行为如何? 我试图找到一个合适的职位,我可以得到所有的信息,但我没有得到任何。有人能建议我一些链接/帖子,我可以学习这个吗? 编辑: 到目前为止我遇到的链接/帖子: > onSaveInsta

  • 我有很多活动。 A是列表活动。 B是表单活动。并动态生成。我连续开了两次这个活动。 我怎样才能像碎片一样管理活动。 *当我从第二个B返回时,第一个B应该打开*